指定加载哪一个哪一个配置文件。
此注解是 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 文件才有效。