如何使用Spring @Value从Java属性文件填充HashMap

是否可以使用Spring @Value将值从属性文件映射到HashMap。

目前,我有这样的事情,映射一个值不是问题。但是我需要在HashMap到期中映射自定义值。这样的事情可能吗?

@Service

@PropertySource(value = "classpath:my_service.properties")

public class SomeServiceImpl implements SomeService {

@Value("#{conf['service.cache']}")

private final boolean useCache = false;

@Value("#{conf['service.expiration.[<custom name>]']}")

private final HashMap<String, String> expirations = new HashMap<String, String>();

属性文件:“ my_service.properties”

service.cache=true

service.expiration.name1=100

service.expiration.name2=20

是否可以像这样的键映射:值集

  • name1 = 100

  • name2 = 20

回答:

你可以使用类似于SPEL json的语法在属性文件中编写一个简单的映射或列表映射。

simple.map={'KEY1': 'value1', 'KEY2': 'value3', 'KEY3': 'value5'}

map.of.list={\

'KEY1': {'value1','value2'}, \

'KEY2': {'value3','value4'}, \

'KEY3': {'value5'} \

}

我使用\多行属性来提高可读性

然后,在Java中,你可以@Value像这样自动访问和解析它。

@Value("#{${simple.map}}")

Map<String, String> simpleMap;

@Value("#{${map.of.list}}")

Map<String, List<String>> mapOfList;

在此处${simple.map}@Value从属性文件获取以下字符串:

"{'KEY1': 'value1', 'KEY2': 'value3', 'KEY3': 'value5'}"

然后,将其评估为好像已内联

@Value("#{{'KEY1': 'value1', 'KEY2': 'value3', 'KEY3': 'value5'}}")

以上是 如何使用Spring @Value从Java属性文件填充HashMap 的全部内容, 来源链接: utcz.com/qa/435198.html

回到顶部