指定加载哪一个哪一个配置文件。
此注解是 Spring3.1
后提供的,并不属于 Spring Boot
。
另外,该注解对 *.yml
并不友好,建议使用 *.properties
文件。
当然,还有一个类似功能的注解 @PropertySources
。
参考资料
相关资料
一般来说,使用 @PropertySource 注解,通常需要配合下面两个注解使用。
使用
我们先看一下该注解的参数。
name
- 为这里资源指定一个名称,这个没什么好说的。
- 这篇详细解释了 name
value
- 用于指定资源路径,注意通配符(比如
/*.properties
)在这里是没有用的,路径必须明确指向到一个properties
文件。因为这里value
的类型是String
数组,因此这里可以指定多个配置文件。 - 单个
@PropertySource(value= {"classpath:redis.properties"})
- 多个
@PropertySource(value= {"classpath:redis.properties","classpath:database.properties"})
- 用于指定资源路径,注意通配符(比如
ignoreResourceNotFound
- 当指定的配置文件不存在是否报错,默认是
false
; ignoreResourceNotFound
为true
的时候,程序不会报错,如果ignoreResourceNotFound
为false
的时候,程序直接报错。
- 当指定的配置文件不存在是否报错,默认是
encoding
- 用于指定读取属性文件所使用的编码,我们通常使用的是
UTF-8
,默认为空。
- 用于指定读取属性文件所使用的编码,我们通常使用的是
简单的例子
一个 test.properties
文件放在 resources/config
目录里。
内容如下
1 | resources/config/test.properties = |
在某一个 java
文件中,这样使用
1 |
|
@PropertySources
@PropertySources({ @PropertySource("classpath:redis.properties"), @PropertySource("classpath:database.properties")})
对 yml 文件的支持情况
spring boot 2.5.2
在这个版本下,使用该注解,对 yml 文件支持很差。
比如:
创建一个 test.yml
文件,放在 resources/config 中。指定
1 | cc: |
然后,在一个类中,我这样使用。
1 |
|
但是,最后,name 还有 age 都是 null ,也就是没有注入成功。
想要使用的话,必须加上启动参数
spring.config.location=classpath:/config/test.yml
但是,一旦加上启动参数,其他默认的加载文件也不会加载了。
spring.config.location 继续加载其他配置文件
上面那个章节,我们知道了加上 spring.config.location
指定配置文件之后,就不会再加载其他了,那么,我们依然想加载其他的怎么办。
这个时候,就是使用这个注解。
比如,即便是
spring.config.location=classpath:/config/test.yml
我们在文件中这样使用,依然会成功。
1 |
|
同时,这个的使用,也只针对 properties
文件才有效。