Is it possible to use Spring @Value, to map values from properties file to the HashMap.
Currently I have something like this, and mapping one value is not a problem. But I need to map custom values in HashMap expirations. Is something like this possible?
@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>();
Property file: ‘my_service.properties’
service.cache=true service.expiration.name1=100 service.expiration.name2=20
Is it posible to map like this key:value set
name1 = 100
name2 = 20
Advertisement
Answer
I make one solution inspired by the previous post.
Register property file in the Spring configuration:
<util:properties id="myProp" location="classpath:my.properties"/>
And I create component:
@Component("PropertyMapper") public class PropertyMapper { @Autowired ApplicationContext applicationContext; public HashMap<String, Object> startWith(String qualifier, String startWith) { return startWith(qualifier, startWith, false); } public HashMap<String, Object> startWith(String qualifier, String startWith, boolean removeStartWith) { HashMap<String, Object> result = new HashMap<String, Object>(); Object obj = applicationContext.getBean(qualifier); if (obj instanceof Properties) { Properties mobileProperties = (Properties)obj; if (mobileProperties != null) { for (Entry<Object, Object> e : mobileProperties.entrySet()) { Object oKey = e.getKey(); if (oKey instanceof String) { String key = (String)oKey; if (((String) oKey).startsWith(startWith)) { if (removeStartWith) key = key.substring(startWith.length()); result.put(key, e.getValue()); } } } } } return result; } }
And when I want to map all properties that begin with specifix value to HashMap, with @Value annotation:
@Service public class MyServiceImpl implements MyService { @Value("#{PropertyMapper.startWith('myProp', 'service.expiration.', true)}") private HashMap<String, Object> portalExpirations;