java - Spring Boot - 从 application.yml 注入静态地图
问题描述
我参考了Spring Boot - 从 application.yml注入映射来从 application.yml 文件注入映射
我的 application.yml 片段如下
easy.app.pairMap:
test1: 'value1'
test2: 'value2'
属性文件如下
@Component
@Configuration
@ConfigurationProperties("easy.app")
@EnableConfigurationProperties
public class TestProperties {
private Map<String, String> pairMap= new HashMap<String, String>();
public void setPairMap(Map<String, String> pairMap) {
this.pairMap= pairMap;
}
}
上面给出的代码有效。当“ pairMap ”设置为静态时,不会从 application.yml 文件中读取映射,如下所示。
@Component
@Configuration
@ConfigurationProperties("easy.app")
@EnableConfigurationProperties
public class TestProperties {
private static Map<String, String> pairMap= new HashMap<String, String>();
public static void setPairMap(Map<String, String> pairMap) {
TestProperties .pairMap= pairMap;
}
}
PS:问题仅在注入 map 时出现,而不是在注入字符串时出现。为什么会出现这种行为?
即以下配置中的以下字符串注入有效,但映射注入无效
easy.app.key1: 'abc'
easy.app.pairMap:
test1: 'value1'
test2: 'value2'
属性文件如下
@Component
@Configuration
@ConfigurationProperties("easy.app")
@EnableConfigurationProperties
public class TestProperties {
private Map<String, String> pairMap= new HashMap<String, String>();
private static String key1;
public static void setPairMap(Map<String, String> pairMap) {
this.pairMap= pairMap;
}
public static void setKey1(String key1) {
TestProperties.key1= key1;
}
public String getKey1(){
return key1;
}
解决方案
修复这个:
easy:
app:
pairMap:
test1: value1
test2: value2
@CompileStatic
@Component
@EnableConfigurationProperties
class ConfigHolder {
@Value(value = '${easy.app.pairMap.test1}')
String test1Valse;
@Value(value = '${easy.app.pairMap.test2}')
String test2Valse;
}
@CompileStatic
@Configuration
@EnableConfigurationProperties
public class TestProperties {
@Autowired
ConfigHolder configHolder;
private Map<String, String> pairMap= new HashMap<String, String>();
public void setPairMap(Map<String, String> pairMap) {
if(pairMap != null && !pairMap.isNotEmpty()) {
this.pairMap = pairMap;
} else {
this.pairMap.put("test 1", ${configHolder.test1Valse});
this.pairMap.put("test 2", ${configHolder.test2Valse});
}
}
}
推荐阅读
- asp.net - Missing Loading Image From Database Use Handler.ashx
- java - Spring boot PutMapping with Enum as RequestBody issue
- angular - Angular 材质:从代码中控制涟漪效应
- c++ - What does a parser for C++ do until it can differentiate between comparisons and template instantiations?
- ios - CoreData saving objects earlier than expected
- c++ - Why is this code not working, How do i fix it?
- python - Django how to import a file from another file under same folder?
- java - Make whole layout that contains ListView scrollable
- php - Updating a row in Laravel 5.7 doesn't work, how do I fix it?
- terraform - Terraform 配置:strconv.ParseInt:解析无效语法错误