java - Spring:如何避免自动解析特定占位符的属性

标签 java spring configuration

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

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

注入(inject)到这个属性中的值是这样的:

/app/${version}/otherAppStarter.bat

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

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

谢谢!

最佳答案

您可以注册一个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);
    }
}

如果您通过 @PropertySource 使用 Java 配置,则还需要重写方法 doProcessProperties,如 Spring Jira SPR-8928 中所述。 :

@Override
protected void doProcessProperties(ConfigurableListableBeanFactory beanFactoryToProcess,
                                   StringValueResolver valueResolver) {

    super.doProcessProperties(beanFactoryToProcess,
            new StringValueResolver() {
                @Override
                public String resolveStringValue(String strVal) {
                    return convertPropertyValue(valueResolver.resolveStringValue(strVal));
                }
            });
}

Java 配置的示例如下所示:

@Configuration
@PropertySource("classpath:saml/saml.properties")
public class MyConfiguration {

    @Bean
    public static PropertySourcesPlaceholderConfigurer myPlaceholderConfigurer() {
        return new MyPlaceholderConfigurer();
    }
}

关于java - Spring:如何避免自动解析特定占位符的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39476859/

相关文章:

javascript - 如何使用Java设置和读取cookie值

通过 LDAP 验证 NTLM 身份验证以检索用户名和域的 Java 方法

java - 没有@RequestMapping的单个Spring mvc 4 Controller 返回从我的html View 中剥离css

java - 如何拆分Spring条件配置?

configuration - 使用代码或脚本(查询)启用到 sql server express 已安装数据库的 tcp\ip 远程连接

java - 我得到下一个输出 :The class 'misBeans.Datos' does not have a readable property 'enlace'

java - 从数据库中检索数据并用单选按钮显示它,单选按钮包含 struts 1.2 中的数据值

java - 用不同的Spring Boot插件Gradle多个子项目

java - 企业 Java Web 应用程序通常需要访问文件系统吗?

spring - Spring配置类中是否可以进行构造函数注入(inject)?