使用springboot读取自定义配置遇到一些问题,主要归为如下几点:
1.最新的SpringBoot版本@ConfigurationProperties注解不支持location属性,无法指定配置文件路径
2.通过新的方式@PropertySource注解指定配置文件路径后,发现读取到的配置仍旧是默认配置文件的内容
3.读取自定义yml配置文件,使用@PropertySource注解指定配置文件路径后,还是无法读取到内容
问题1:
原因:SpringBoot官方认为在配置类中指定配置文件路径不是一种合理的操作,所以去掉了location属性
解决方式:增加@PropertySource(value="classpath:my.properties"},指定自定义配置文件路径
问题2:
原因:配置注解@ConfigurationProperties(prefix="config.ignore"),指定了prefix="config.ignore",但是applcation.properties配置文件中也存在相同的前缀配置项,SpringBoot读取了默认配置文件applcation.properties中的配置内容
解决方式:修改my.properties中配置项的名称,不与applcation.properties冲突
问题3:
原因:使用@PropertySource注解只能加载yml配置文件,但不能将其配置信息暴露给spring environment
解决方式:
1.最新的SpringBoot版本@ConfigurationProperties注解不支持location属性,无法指定配置文件路径
2.通过新的方式@PropertySource注解指定配置文件路径后,发现读取到的配置仍旧是默认配置文件的内容
3.读取自定义yml配置文件,使用@PropertySource注解指定配置文件路径后,还是无法读取到内容
问题1:
原因:SpringBoot官方认为在配置类中指定配置文件路径不是一种合理的操作,所以去掉了location属性
解决方式:增加@PropertySource(value="classpath:my.properties"},指定自定义配置文件路径
问题2:
原因:配置注解@ConfigurationProperties(prefix="config.ignore"),指定了prefix="config.ignore",但是applcation.properties配置文件中也存在相同的前缀配置项,SpringBoot读取了默认配置文件applcation.properties中的配置内容
解决方式:修改my.properties中配置项的名称,不与applcation.properties冲突
问题3:
原因:使用@PropertySource注解只能加载yml配置文件,但不能将其配置信息暴露给spring environment
解决方式:
使用@PropertySource注解的同时,另外通过自定义PropertySourcesPlaceholderConfigurer实例将其配置信息暴露给spring environment,具体代码如下:
@Bean
public static PropertySourcesPlaceholderConfigurer properties()
{
PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
YamlPropertiesFactoryBean yml = new YamlPropertiesFactoryBean();
//引入自定义的yml配置文件,暴露给spring environment
yml.setResources(new FileSystemResource("src/main/resources/yml/my.yml"));
configurer.setProperties(yml.getObject());
return configurer;
}
使用springboot读取自定义配置的代码例子如下:
https://github.com/ingorewho/springboot-develope/tree/master/springboot-config