Java.util.Properties with environment and Spring



我有许多使用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 

最新更新