【问题标题】:Java.util.Properties with environment and SpringJava.util.Properties 与环境和 Spring
【发布时间】:2021-05-17 20:04:28
【问题描述】:

我有 许多 类消耗 java.util.properties 类型的资源,但现在,不同的属性文件具有环境变量,例如:

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"));

用这个 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 spring properties environment-variables


    【解决方案1】:

    我的解决方案是:

    导入 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("\\$\\{([^\\}]+)\\}"); @覆盖 受保护的属性 createProperties() 抛出 IOException { 属性 props = mergeProperties(); 设置键 = props.stringPropertyNames(); 对于(字符串键:键){ String valor = props.getProperty(key); 匹配器 m = p.matcher(valor); 如果(m.find()){ m.reset(); StringBuffer sb = new StringBuffer(); 而(m.find()){ 字符串 envVarName = m.group(1); 字符串 envVarValue = System.getenv(envVarName); m.appendReplacement(sb, envVarValue == null ? "" : envVarValue); } m.appendTail(sb); props.setProperty(key,sb.toString()); } } 返回道具; } }

    【讨论】:

      【解决方案2】:

      在运行您的应用时尝试使用下面的正确路径

      java org.springframework.boot.loader.PropertiesLauncher --spring.config.location=file:myProp.properties 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-01
        • 2015-09-30
        • 2011-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多