2016-09-13 5 views
1

フィールドに値を注入する必要がある構成ファイルがあります。Spring:特定のプレースホルダで自動プロパティ解決を回避する方法

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

このプロパティに注入した値は、次のようになめらかである:/app/${version}/otherAppStarter.bat

ので、春にはコンテキストが開始されたときに$ {バージョン}を解決しようとしている私は1つの特性を持っています。しかし、私はこの値をいくつかのプロセスの実行中に他の時間に解決する必要があります。また、$ {version}はメインアプリが動作している間に変更されるかもしれません。

$ {version}プレースホルダを解決しないようSpringに指示する方法はありますか? $ {version}を#[version]のように変更することができます。その後、Springはこのプレースホルダを解決しませんが、いくつかのSpring固有の機能を使用する方法があります。

ありがとうございました!

答えて

0

PropertySourcesPlaceholderConfigurerに拡張されたstatic beanを登録し、そのメソッドconvertPropertyValueをオーバーライドすることができます。場合

public class MyPlaceholderConfigurer extends PropertySourcesPlaceholderConfigurer { 

    @Override 
    protected String convertPropertyValue(String originalValue) { 
     if (originalValue.contains("${version}")) { 
      return originalValue; 
     } 

     return super.convertPropertyValue(originalValue); 
    } 
} 

、あなたは春のJira SPR-8928で説明したように、同様の方法doProcessPropertiesをオーバーライドする必要があります、@PropertySourceを経由して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)); 
       } 
      }); 
} 

Java構成の一例をでき次のようになります。

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

    @Bean 
    public static PropertySourcesPlaceholderConfigurer myPlaceholderConfigurer() { 
     return new MyPlaceholderConfigurer(); 
    } 
} 
関連する問題