我有一个配置文件,其中包含应注入值的字段。我有一个属性:
@Value("${other.app.start.script:}")
private String startScript;
这个属性中注入的值是这样的:
/app/${version}/otherAppStarter.bat
因此,Spring正在尝试在Context启动时解析$ {version}。但我需要在某些进程运行期间的其他时间解析此值。在主应用程序运行期间,$ {version}可能会被更改。
有没有办法告诉Spring不要解析$ {version}占位符。 我可以将$ {version}更改为#[version],然后Spring将无法解析此占位符,但也许有使用一些原生Spring功能的方法。
谢谢!
答案 0 :(得分:0)
您可以注册@Query("select c from Questions c where c.question->>'yourAttributeName' like %?1%")
扩展static
的bean并覆盖其方法PropertySourcesPlaceholderConfigurer
。
convertPropertyValue
如果您通过public class MyPlaceholderConfigurer extends PropertySourcesPlaceholderConfigurer {
@Override
protected String convertPropertyValue(String originalValue) {
if (originalValue.contains("${version}")) {
return originalValue;
}
return super.convertPropertyValue(originalValue);
}
}
使用Java配置,则还需要覆盖方法@PropertySource
,如Spring Jira SPR-8928中所述:
doProcessProperties
Java配置的示例可能如下所示:
@Override
protected void doProcessProperties(ConfigurableListableBeanFactory beanFactoryToProcess,
StringValueResolver valueResolver) {
super.doProcessProperties(beanFactoryToProcess,
new StringValueResolver() {
@Override
public String resolveStringValue(String strVal) {
return convertPropertyValue(valueResolver.resolveStringValue(strVal));
}
});
}