Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在简单java程序中替换spring属性占位符_Java_Properties File - Fatal编程技术网

如何在简单java程序中替换spring属性占位符

如何在简单java程序中替换spring属性占位符,java,properties-file,Java,Properties File,我正在使用Java和spring启动应用程序。我有一个属性文件,需要在运行时添加为docker映像的环境变量。通过占位符使用某些属性时,会在现有环境中对其进行过滤,如下所示 app.name=MyApp app.description=${app.name} is a Spring Boot application 我正在编写一个示例java文件来读取这个属性文件,并创建一个带有一些过滤属性的map对象。在此过程中,如何用实际的属性值替换占位符 我尝试过使用getProperty方法查找密钥并

我正在使用Java和spring启动应用程序。我有一个属性文件,需要在运行时添加为docker映像的环境变量。通过占位符使用某些属性时,会在现有环境中对其进行过滤,如下所示

app.name=MyApp
app.description=${app.name} is a Spring Boot application
我正在编写一个示例java文件来读取这个属性文件,并创建一个带有一些过滤属性的map对象。在此过程中,如何用实际的属性值替换占位符

我尝试过使用
getProperty
方法查找密钥并替换。但我希望避免查找硬编码的属性密钥名称,以避免维护困难。
提前感谢。

用编号的令牌替换命名的令牌,并使用Java SE类。它允许你完全按照自己的要求去做

假设道具包含从文件加载的所有属性

MessageFormat.format((String) props.get("app.description"),((String) props.get("app.name"));
您的财产应为:

app.description={0}是一个Spring启动应用程序


否则您将需要编写一个自定义的

我将创建一个新的属性子体,使用一个获取属性值的方法,并替换任何引用(如果有的话)

大概是这样的:

class MyProperties extends Properties
{
    // Constructors, as needed
    private Pettern p = Pattern.compile("\\$\\{([^}]+)\\}");
    public String getString(final String key)
    {
        final String value = getProperty(key);
        if (null == value)
            return null;
        final StringBuffer result = new StringBuffer();
        final Matcher m = p.matcher(value);
        while (m.find())
        {
            final String refKey = m.group(1);
            final String refValue = getProperty(refKey);
            m.appendReplacement(result, null == refValue ? refKey : refValue);
        }
        m.appendTail(result);
        return result.toString();
    }
}

此代码段不会替换占位符值。它与${1}@Sathya保持相同,请参见实际的代码。最初我添加了错误的占位符。编辑it@babs注意编辑。谢谢但是正如Usagi所指出的,它仍然很难将按键编码得完美……非常感谢您,我想指出第二行private Pattern p=Pattern.compile(“\\$\{([^}]+)\}”)中的一个输入错误;