@Value和@ConfigurationProperties
功能 松散绑定 SpEL JSR303数据校验 复杂类型封装
@ConfigurationProperties 批量注入配置文件中的属性 支持 不支持 支持 支持
@Value 一个个指定 不支持 支持 不支持 不支持
配置文件yml还是properties他们都能获取到值;
如果说,我们只是某个业务逻辑中需要获取一个配置文件中的某项值,使用@Value
如果说,我们专门编写了一个JavaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
@PropertySource与@ImportResourse
@ConfigurationProperties只能读取application.properties或application.yml,如果指定某个properties文件或者yaml文件,那么就需要使用@PropertySource注解
@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效,Spring boot里没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;想让Spring的配置文件生效,加载进来,@ImportResource标注在一个配置类上。
@ImportResource(locations = {"classpath:beans.xml"})
配置文件的占位符
1. 随机数占位符
${random.value}、${random.int}、${random.long}
2. 占位符获取之前配置的值,如果没有可以使用冒号:指定默认值
person.last-name=张三${random.uuid}
person.age = ${random.int}
person.dog.name=${person.hello:hello}_dog
激活指定的profile
1.在多个profile配置文件时, 在配置文件中指定 spring.profiles.activate=dev,指定application-dev.properties
2.在多文档块时(yaml)时,配置。
3. 命令行执行:java -jar xxx.jar --spring.profiles.acttivate=dev;
4. 虚拟机参数配置。
配置文件加载位置
1. springboot 启动会扫描application.yml/application.properties文件作为spring boot的默认配置文件。
2. spring boot 启动时会加载以下路径:
- file:./config/
- file:./
- classpath:/config/
- classpath:/
以上按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置内容。
也可以在命令行,通过配置spring.config.location=xxx.properties来启动,进行配置