gpt4 book ai didi

java - Spring Boot - 从 application.yml 注入(inject)静态映射

转载 作者:太空宇宙 更新时间:2023-11-04 09:59:43 25 4
gpt4 key购买 nike

我提到了Spring Boot - inject map from application.yml用于从 application.yml 文件注入(inject) map

我的 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 文件中读取 Map,如下所示。

@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:问题仅在注入(inject) map 时出现,但在注入(inject) string 时不出现。为什么会出现这种行为?

即以下配置中的字符串注入(inject)有效,但 map 注入(inject)无效

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});
}
}

}

关于java - Spring Boot - 从 application.yml 注入(inject)静态映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53672238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com