当我们使用 @Value注解 或者 ${} 来获取到自定义的propertier文件中的值的时候,往往需要声明一下相应的properties文件:
(1)可以使用注解来声明:@PropertySource(value="xxx.properties ")
(2)也可以在配置文件中声明:
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:config.properties</value>
</property>
</bean>
这样如果在代码里要使用的话,就必须声明一个@value的值,所以如果要直接在代码里get配置文件里面的值的话,可以这样做:
重写上面的class:PropertyPlaceholderConfigurer;
public class PropertyPlaceHolder extends PropertyPlaceholderConfigurer {
private static Map<String,String> propertyMap;
@Override
protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props) throws BeansException {
super.processProperties(beanFactoryToProcess, props);
propertyMap = new HashMap<>();
for (Object key : props.keySet()) {
String keyStr = key.toString();
String value = props.getProperty(keyStr);
propertyMap.put(keyStr, value);
}
}
public static String getProperty(String name) {
return propertyMap.get(name);
}
}
这样在代码中就可以直接使用PropertyPlaceHolder的gtePropert函数来获取相应的属性值:
PropertyPlaceHolder.getProperty("spring.datasource.receive.username");