Spring Boot配置加载
0
Spring Boot默认加载的是application.properties
和application.yml
,如果两个配置同时存在时,默认使用会使用properties
的配置替换yml
,可以理解为先加载yml
,然后加载properties
进行替换。
如果配置了spring.profiles.active
属性时,还会加载application-{profiles}.properties
或application-{profiles}.yml
。
上面文件加载的顺序是:application.yml
application-{profiles}.yml
application.properties
application-{profiles}.properties
,后面的配置会替换前面的配置。
自定义配置
自定义properties
email.port=22
email.name=email-name
email.user.names=user-names
email-tencent.port=tencent-22
email-tencent.name=email-tencent-name
email-tencent.user.names=user-tencent-names
可以使用如下代码进行自动注入:
@ConfigurationProperties(prefix = "email")
@PropertySource(value = "email.properties")
...
private String port;
private String name;
@Value("${email.user.names}")
private String names;
port
和name
可以自动注入,email.user.names
需要写注解才可以设置正确的值。
如果不写@Value
注解names
的值会是null
。
如果@Value("${email.user.names}")
注解放到name
上面,name
的值依旧是email-name
,而不会变成user-names
。
最终上面三个变量的值是:22/email-name/user-names。
如果不写prefix
时,上面port
和name
的值是null
。
自定义yml
email :
user :
names : user-names
port : 22
name : email-name
email-tencent :
user :
names : user-tencent-names
port : tencent-22
name : email-tencent-name
代码如下:
@ConfigurationProperties
@PropertySource(value = "email.yml")
...
private String port;
private String name;
private String names;
yaml
不支持@Value
注解,只能自动解析了,不过names
可以自动注入。
不过这里有一个问题就是不能区分email
和email-tencent
了,后面的会替换前面的配置,最终三个变量的值是:tencent-22/email-tencent-name/user-tencent-names。