我有许多使用java.util类型资源的类。属性,但现在,不同的属性文件有环境变量,如:
com.something.one=AAA1
com.something.two=${MyEnvVar}
com.something.url=http://${myhost}:${myport}/xxx/yyy/zzz
我的类是这样的:
public class MyTest {
@Resource(name="utilProp")
private Properties prop;
public void init() {
System.out.println("var one = "+prop.getProperty("com.something.one"));
System.out.println("var two = "+prop.getProperty("com.something.two"));
System.out.println("var url = "+prop.getProperty("com.something.url"));
with this Bean:
<util:properties id="utilProp" location="classpath:myProp.properties"/>
我得到这样的结果:
var one = AAA1
var two = ${MyEnvVar}
var url = http://${myhost}:${myport}/xxx/yyy/zzz
我如何定义一个与Java.util.Properties兼容但也读取环境变量的Bean ?
类似:
<beans:bean id="utilProp" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<beans:property name="searchSystemEnvironment" value="true" /> //This not exists here !!! :(
<beans:property name="locations">
<beans:list>
<beans:value>classpath:myProp.properties</beans:value>
</beans:list>
</beans:property>
</beans:bean>
我的解决方案是:
<>以前进口java.io.IOException;进口java.util.Properties;进口java.util.Set;进口java.util.regex.Matcher;进口java.util.regex.Pattern;进口org.springframework.beans.factory.config.PropertiesFactoryBean;MyPropertiesFactoryBean扩展PropertiesFactoryBean私有静态模式p = Pattern.compile ("\$\{([^\}]+)\}");@OverridecreateProperties()抛出IOException {属性props = mergeProperties();Set keys = props.stringPropertyNames();for (String key: keys) {字符串valor = props.getProperty(key);Matcher m = p.matcher(hero);如果(m.find ()) {m.reset ();StringBuffer sb = new StringBuffer();而(m.find ()) {字符串envVarName = m.group(1);String envVarValue = System.getenv(envVarName);m.appendReplacement(sb, envVarValue == null ?)": envVarValue);}m.appendTail(某人);props.setProperty(关键,sb.toString ());}}返回道具;}}尝试在运行应用程序时使用正确的路径
java org.springframework.boot.loader.PropertiesLauncher --spring.config.location=file:myProp.properties