spring boot @ConfigurationProperties废弃location属性
在spring boot(版本1.5.1.RELEASE)
项目中,当准备映射自定义的配置文件属性到类中的时候,发现原本的@ConfigurationProperties
注解已将location
属性移除,因此导致无法正常给配置类的属性赋值。
在为移除之前使用方法如下:
@ConfigurationProperties(prefix = "remote",locations={"classpath:remote.properties"})
解决方案一
之所以废除该方式,是因为spring boot认为将一个配置类绑定到一个配置文件是一件不好的事。
此时可以使用在配置类中采用@Component
的方式注册为组件,然后使用@PropertySource
来指定自定义的资源。
@Component @PropertySource({"classpath:remote.properties"}) @ConfigurationProperties(prefix = "remote") public class RemoteConfig { /** * 远程服务地址 */ private String address; /** * 远程服务端口 */ private int port; // getter/stetter方法 }
解决方案二
在启动的时候指定需要读取的配置文件名称不管你的配置文件是yaml、还是yml,都只需要指定名称,不需要后缀。
new SpringApplicationBuilder(Application.class) .properties("spring.config.name=application,mine") .run(args);
当然如果有很多的配置文件,可以考虑如下方式。以后有新的配置文件需要读取,直接在数组里面添加就可以了。
public static String getConfigNamesProperties() { String[] configNameArray = { "aaa", "bbb", "ccc", "ddd", "eee", "fff" }; String configNames = StringUtils.join(configNameArray, ","); return "spring.config.name=" + configNames; }
启动中读取修改:
new SpringApplicationBuilder(ReturnCenter.class) .properties(getConfigNamesProperties()) .run(args)
其他相关使用方式不变。
Spring技术视频
CSDN学院:《Spring Boot 视频教程全家桶》
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接
本文链接:https://choupangxia.com/2019/12/25/spring-boot-configurationproperties-location/