spring boot 自定义配置文件读取值不使用@Value
2018-02-05 本文已影响2543人
阿波罗程序猿
试想下,如果一个配置文件里面有
30
多个的配置项,那么一个个读取写@Value
将是多么费劲的一件事儿。今天我们就要解决这个麻烦的问题。
spring-boot Version: 1.5.4.RELEASE
假如我想使用SDKConfig.FRONT_TRANS_URL
来获取配置项的值该怎么做?先看个例子,改造银联提供的SDK
代码,这里缩减篇幅,他们提供的配置项有很多...
// 绑定配置项的前缀
@ConfigurationProperties(prefix = "acpsdk")
// 添加自定义配置文件
@PropertySource(value = "classpath:pay/acp_sdk.properties")
public class SDKConfig {
// 由于 Spring 不允许把值注入到静态变量中所以这里使用 @Value 是不起效果的
/**
* 配置文件中的前台URL常量
*/
public static String FRONT_TRANS_URL;
/**
* 配置文件中的后台URL常量
*/
public static String BACK_TRANS_URL;
// 手动定义一个静态的 PropertySourcesPlaceholderConfigurer。
// 它的作用是解析 @Value 中的 ${} ,如果没有这个 bean ,将取不到配置项的值。
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigures() {
return new PropertySourcesPlaceholderConfigurer();
}
// 注入配置项的值
public void setFrontTransUrl(String frontTransUrl) {
FRONT_TRANS_URL = frontTransUrl;
}
public void setBackTransUrl(String backTransUrl) {
BACK_TRANS_URL = backTransUrl;
}
}
使用SDKConfig.FRONT_TRANS_URL;
OK 取到值了。完美。