1、使用@ConfigurationProperties(prefix = "** ") 统一前缀
Yaml语法配置:
student:
studentName: lfguan
studentId: 23
studentAge: 89
birth: 2018/12/12
2、使用@value
properties配置
school.schoolName=一中
school.address=合肥市
school.createTime=2019/12/12
2种配置进行对比
| @ConfigurationProperties | @value |
功能 | 批量导入配置文件数据 | 一个一个指定 |
松散绑定 | 支持(格式不是一定完全一样) | 不支持 |
Spel | 不支持(配置文件不支持计算) | 支持 |
Jsr303数据校验 | 支持(validation-api等) | 不支持 |
复杂类型封装 | 支持(map,list等) | 不支持 |
3、扩展注解
3.1、@PropertySource()对于指定配置文件
3.2、@importresource()
导入spring配置,让spring配置生效;Spring boot种没有spring的配置文件,自己编写的无法自动识别。
3.3、@bean给容器添加组件
Springboot 推荐给容器中添加组件的方式;推荐使用全注解
- 配置类@Configuration-----》spring的配置文件
- 使用bean给容器添加组件(有依赖关系)
//将方法的返回值添加到容器中;容器中这个组件默认id就是方法名
3.4、@Import注解
3种方式
通过查看@Import源码可以发现@Import注解只能注解在类上,以及唯一的参数value上可以配置3种类型的值Configuration,ImportSelector,ImportBeanDefinitionRegistrar
1.基于Configuration也就是直接填对应的class数组
2.基于自定义ImportSelector的使用
3.基于ImportBeanDefinitionRegistrar的使用
结果:
3.5、@Conditional条件注解
Springboot中使用需要继承SpringBootCondition重写getMatchOutcome(matches中有使用)
当一个 Bean 被 Conditional 注解修饰时,Spring容器会对数组中所有 Condition 接口的 matches() 方法进行判断,只有当其中所有 Condition 接口的 matches()方法都为 ture 时,才会创建 Bean 。
OnBeanCondition | 当容器中至少存在一个指定name或者class的bean时 |
OnClassCondition | 当classpath中至少存在一个指定的class |
OnExpressionCondition | 当指定的spel表达式为true时 |
OnJavaCondition | 当jdk版本满足指定条件 |
OnJndiCondition | 当JNDI接口至少一个可用时 |
ConditionalOnMissingBean | 当容器中指定的name或者class的bean都不存在 |
ConditionalOnMissingClass | 当classpath中指定的class都不存在时 |
OnPropertyCondition | 当配置文件中特定配置项为指定值 |
OnResourceCondition | 当classpath中存在指定文件资源 |
OnWebApplicationCondition | 当应用上下文不是web环境时 |
我们来看下mongo配置
Springboot自带配置里面用到很多import和condition注解
Mongo的使用默认配置的条件:
存在MogoClient.class等相关类即引入了mongo的jar包
不存@ConditionalOnMissingBean(MongoDbFactory.class)
才会去使用默认配置
当我们添加一个配置
使用自定义配置了,取消默认配置
4、配置文件加载顺序
提示:默认配置文件加载顺序
- 项目/config/application.properties>
- 项目/application.properties
- Resources/config/ application.properties
- resources / application.properties
加载外部配置:
java -jar spring-boot-demo-0.0.1-SNAPSHOT.jar --spring.config.location=c:\application.properties
替换关系,非覆盖关系