1 @value 和 @ConfigurationProperties 的区别
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(一种松散语法) | 支持 | 不支持 |
SpEL(一种计算形式) | 不支持 | 支持 |
JSR303 数据校验(@Validated) | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
在用 @ConfigurationProperties 时,配置文件不论是 yml 还是 properties 都可以获取到值。
总的来说:
如果说,我们只是在某个业务逻辑中需要获取配置文件中的某一项值,用 @value 注解。
如果说,我们专门编写了一个 javaBean 来和配置文件进行映射时,用 @ConfigurationProperties 注解。
2 @PropertySource & @ImportResource
@PropertySource:加载指定的配置文件。
@ImportResource:导入 Spring 的配置文件,让配置文件里面的内容生效。
Spring Boot 里面没有 Spring 的配置文件,我们自己编写的配置文件,Spring Boot 也无法自动识别。
若想让 Spring 的配置文件生效,则需要将 @ImportResource 注解标注在配置类上,可如下:
@ImportResource(location = {"classpath: beans.xml"})
@SpringBootApplication
public class SpringBootConfigApplication{
...
}
**PS:**Spring Boot 不推荐使用配置文件的方式来注入 Bean,用 @Bean 注解来给容器中添加组件。
3 配置文件的占位符
随机数:
${random.value} ${random.int} ${random.long}
${random.int(10)} ${random.int[1024, 65536]}
占位符获取之前配置的值,如果没有则可以使用:来指定默认值
person.last-name = 张三 ${random.uuid}
person.age = ${random.int}
person.dog.name = $(person.hello:hello)_dog
4 Profile
Profile 是 Spring 对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境。
1、多 Profile 文件的方式:
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml。
此时可以在 application.properties 文件中设置属性 spring.profiles.active 来激活。
spring.profiles.active=dev
2、yml 支持多文档块的方式:
在application.properties 文件中:
server:
port: 8081
spring:
profiles:
active: dev # 指定所要激活的环境
---
server:
port: 8082
spring:
profiles: dev # 指定属于哪个环境
---
server:
port: 8083
spring:
profiles: prod # 指定属于哪个环境
虽然写起来方便,但相对于多文件的方式,这种写法的可读性较差。
3、激活指定 profile:
1、在配置文件中指定 spring.profiles.active=dev
2、命令行参数 --spring.profiles.active=dev
3、虚拟机参数 -Dspring.profiles.active=dev