如何在简单java程序中替换spring属性占位符
我正在使用Java和spring启动应用程序。我有一个属性文件,需要在运行时添加为docker映像的环境变量。通过占位符使用某些属性时,会在现有环境中对其进行过滤,如下所示如何在简单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方法查找密钥并
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(“\\$\{([^}]+)\}”)中的一个输入错误;