Spring:如何避免在特定占位符中自动解析属性

时间:2016-09-13 18:34:25

标签: java spring configuration

我有一个配置文件,其中包含应注入值的字段。我有一个属性:

@Value("${other.app.start.script:}")
private String startScript;

这个属性中注入的值是这样的:

/app/${version}/otherAppStarter.bat

因此,Spring正在尝试在Context启动时解析$ {version}。但我需要在某些进程运行期间的其他时间解析此值。在主应用程序运行期间,$ {version}可能会被更改。

有没有办法告诉Spring不要解析$ {version}占位符。 我可以将$ {version}更改为#[version],然后Spring将无法解析此占位符,但也许有使用一些原生Spring功能的方法。

谢谢!

1 个答案:

答案 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));
                }
            });
}