运维和部署难度大
微服务单元之间通过HTTP的方式进行轻量级通信
创建maven项目
导入SpringBoot的官方依赖
创建主程序
创建Controller
主程序测测试
简化部署
springboot的plugin插件能将整个应用打包成jar包, 直接使用java -jar的命令运行
版本仲裁
springboot的pom依赖的父项目
org.springframework.boot
spring-boot-starter-parent
2.2.1.RELEASE
他的父项目时
org.springframework.boot
spring-boot-dependencies
2.2.1.RELEASE
../../spring-boot-dependencies
里面定义了java应用需要的jar包的版本
org.springframework.boot
spring-boot-starter-web
spring-boot-starter-web
spring-boot-starter SpringBoot项目的启动器,帮我们导入项目所依赖的依赖
SpringBoot将所有的功能场景抽取出来,做成一个个的starters(启动器),在项目里导入starter,相关场景的所哟襰都会导入进来,需要什么场景就导入什么场景的starter
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
@SpringBootConfiguration SpringBoot的配置类
标注在哪个类上,表示这是一个SpringBoot的配置类
@Configuration 配置类上来标注这个注解
配置类----配置文件 配置类也是容器中的一个组件@Component
@EnableAutoConfiguration 开启自动配置功能
以前我们需要配置的东西,SpringBoot帮我们自动配置,@EnableAutoConfiguration告诉SpringBoot开启自动配置的功能,这样自动配置才能生效
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
@AutoConfigurationPackage:自动配置包
@Import({Registrar.class})
Spring的底层注解@import,给容器中导入一个组件,导入的组件由AutoConfigurationPackages.Registrar.class
将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器中
@Import({AutoConfigurationImportSelector.class})
给容器中注入组件?
AutoConfigurationImportSelector:导入哪些组件的选择器;
将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器中
会给容器中导入很多自动配置类(xxxAutoConfiguration),就是给容器中导入这个场景所需要的所有组件,并配置好这些组件
有了自动配置类,免去了我们手动编写配置注入功能组件等的工作
SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
从AutoConfigure类路径下的META-INF/spring.factories获取指定的类的值(类名),将这些值(xxxAutoConfiguration)作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作,以前需要我们自己配置的东西,这些配置类都帮我们做了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zPBEk2lG-1574851872810)(C:\Users\86176\AppData\Roaming\Typora\typora-user-images\1574416204824.png)]
Spring-boot-autoconfigure-2.2.1.RELEASE.jar
在properties中我们能配置的属性都是来源于这个功能的properties类
根据当前不同的条件判断,决定这个配置类是否生效?
一但这个配置类生效:这个配置类就会给容器中添加各种组件;这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的;
xxxAutoConfiguration;自动配置类 每个配置类相当于以前的配置文件
给容器中添加组件
xxxproperties类:封装配置文件中相关属性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8idaFIUA-1574851872811)(C:\Users\86176\AppData\Roaming\Typora\typora-user-images\1574417239452.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NFpg0TOA-1574851872811)(C:\Users\86176\AppData\Roaming\Typora\typora-user-images\1574417096356.png)]
自动配置类必须在一定的条件下才能生效
通过启动debug=true属性;来让控制台打印自动配置报告,这样我们就可以很方便的知道哪些自动配置类生效
SpringBoot的配置文件,名称是固定的
yml相比于xml更加简洁,以数据为中心
基本语法
k:(空格)v
左对齐属于同一级别
值的写法
k: v
字符串默认不使用单引号或者双引号
""双引号:不会转义字符串里的特殊字符,特殊字符会作为本身想表达的意思
''单引号:会转义特殊字符,特殊字符最终只是一个普通的字符串数据
对象,map(属性和值)(键值对)
persion:
lastName: zhangsan
age: 20
行内写法
persion: {lastName: zhangsan,age: 18}
数组(List.Set)
用- 值表示数组中的一个元素
pets:
- cat
- dog
- pig
行内写法
pets: [cat,dog,pig]
@Component //表示将这个组件交给spring管理
@ConfigurationProperties(prefix = "k") //表示这个类使用springBoot配置文件里配置的值 需要导入配置文件处理器的依赖(会有提示)
@Value("${persion.name}")
@Value("#{11*2}")
@Value("true")
@Vailidated 校验的注解
@Email 必须是邮箱格式
@ConfigurationProperties和@Value获取值的比较
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入 | 一个个指定 |
松散语法 | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
只获取单项值,用@Value
用JavaBean来映射,用@ConfigurationProperties
@PropertySource()和@ImportResource区别
@PropertySource(value = {"classpath:自定义的配置文件"}) 导入自定义的配置文件
@ImportResource(locations ={"classpath:spring的配置文件"} ) 写在启动类上,导入spring的配置文件
springboot推荐方式
@Configuration 表明这是一个配置和类
@Bean 写在方法上,返回方法的返回值给容器
配置文件占位符
随机数
占位符获取之前配置的值,如果没有可以用:来指定默认值
多peofile文件—(开发,测试),默认使用application,使用自定义的需要在application.properties中指定
yml里用—文档块来表示
激活 spring.profiles.active=模式
配置文件有优先级,从高到低加载,互补配置
多peofile文件—(开发,测试),默认使用application,使用自定义的需要在application.properties中指定
yml里用—文档块来表示
激活 spring.profiles.active=模式
配置文件有优先级,从高到低加载,互补配置