一、场景:
我们在db.properties中配置了数据库连接信息,数据库密码是经过加密的,我们希望对配置文件中的密码进行加密处理,如配置password=123,经过加密,实际使用时是password=avbsdfs。
二、实现:通过继承PropertyPlaceholderConfigurer改写loadProperties方法。
原使用:
<bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:db.properties"/>
</bean>
自定义DecryptPropertyPlaceholderConfigurer,继承PropertyPlaceholderConfigurer,在loadProperties中做你想做的操作:
public class DecryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
private Resource[] locations;
public void setLocations(Resource[] locations) {
this.locations = locations;
}
public void loadProperties(Properties props) throws IOException {
if (this.locations != null) {
for(Resource location : locations){
props.load(location.getInputStream());
}
props.put("name", "Kevin-change");
}
}
}
现使用:
<bean id="propertyPlaceholderConfigurer" class="com.ehsy.svccfg.DecryptPropertyPlaceholderConfigurer">
<property name="locations" value="classpath:db.properties"/>
</bean>