前言
读者:对spring、spring boot有一定了解
难度:初中级,旨在快速应用于项目
参考文献:网络、书籍、官方文档,有任何错误欢迎大家留言拍砖指正
实战模拟源码:https://github.com/yhqnh/demo-springcloud,使用spring-cloud dalston版本
1. Spring boot
1.1. 依赖关系
spring cloud 强依赖spring boot
spring boot强依赖spring
弱弱说一句强依赖就是没有它不行,所以有必要对spring或spring boot一些特性作简单介绍
1.2. 元注解和组合注解
元注解:可以注解到别的注解上的注解,被注解的注解称之为组合注解。
例如@SpringBootApplication就是组合注解,它组和了@SpringBootConfiguration
@EnableAutoConfiguration等。
1.3. 自动配置
spring boot会根据在类路径中的jar包和类,为jar包里的类自动配置bean,这样会极大地减少我们要使用的配置。spring boot通过spring4.X提供的条件注解condition来实现。spring4.x提倡使用java配置和注解配置组合,不需要任何xml配置即可实现spring所有配置。也可使用@ImportResource({“application1.xml”,“application2.xml”})对 xml配置的支持。
关闭特定的自动配置使用@SpringBootConfiguration的exclude属性,例如exclude = {DataSourceAutoConfiguration.class}来关闭数据源自动配置
@condition根据满足某一特定条件创建一个特定的bean,比方说当类路径存在某一jar包时候,自动配置一个或多个bean。
@ConditionalOnBean:当容器里有指定的bean的条件下
@ConditionalOnClass:当类路径下有指定的类的条件下
@ConditionalOnMissingBean:当容器里没有指定bean的情况下
@ConditionalOnResource:类路径是否有指定的值
例如RabbitAutoConfiguration当发现类路径下没有ConnectionFactory类型的bean时创建一个
我们来看看EnableAutoConfiguration注解的源码
这里最关键的@import功能导入配置,EnableAutoConfigurationImportSelector使用
SpringFactoriesLoader.loadFactories方法来扫描具有META-INF/spring.factories文件的jar包,
而spring-boot-autoconfiguration的jar包里有spring.fatories文件,此文件包含了所有自动配置。
1.4. 多环境配置
在spring boot中,多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识。{profile}通过spring.profiles.active=test属性来设置则会加载application-test.properties配置文件。
1.5. 加载顺序
Spring boot加载属性顺序,数值越小优先级越高
1) 在命令行中的参数
2) SPRING_APPLICATION_JSON中的属性。SPRING_APPLICATION_JSON是以json格式配置在系统环境变量中
3) java:comp/env中的JNDI属性
4) Java的系统属性,可以通过System.getProperties()获得的内容
5) 操作系统的环境变量
6) 通过random.*配置的随机属性
7) 位于当前应用jar包之外,针对不同{profile}环境的配置文件内容,例如application-{profile}.properties或是YAML定义的配置文件
8) 位于当前应用jar包之内,针对不同{profile}环境的配置文件内容,例如application-{profile}.properties或是YAML定义的配置文件
9) 位于当前应用jar包之外的application.properties和YAML配置内容
10) 位于当前应用jar包之内的application.properties和YAML配置内容
11) @Configuration注解修改的类中,通过@PropertySource注解定义的属性
12) 应用默认属性,使用SpringApplication.setDefaultProperties定义的内容
例如Spring Cloud Config从git等外部获取配置来取代jar包内本地配置文件,这样即使同样名称的本地调试配置文件对其他demo、staging、prod也没有任何影响,因为7优先级高于8或者说9优先级高于10
1.6. actuator与原生端点
spring-boot-starter-actuator模块的实现对于实施微服务可以有效省去或减少监控系统在采集应用指标时的开发量。它提供了一些原始端点。