2011-07-25 13 views
1

私はアプリケーションで春を使用しています。クラスパス上のいくつかのファイルからいくつかのプロパティをアプリケーションに注入できます。すなわちMainクラスからSpring Beanにプロパティを挿入する方法

<bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer"> 
     <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> 
     <property name="searchContextAttributes" value="true" /> 
     <property name="contextOverride" value="true" /> 
     <property name="ignoreResourceNotFound" value="true" /> 
     <property name="locations"> 
      <list> 
       <value>classpath:application.properties</value> 
      </list> 
     </property> 
    </bean> 

私は春の文脈で${any.property.from.application.properties}を使用できます。そして、私のメインクラスに:それは同様に動作

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("appContext.xml"); 

、私の質問は、私はそれが最初にそこにいることなく、春のコンテキスト内のプロパティファイルの場所を注入行う方法、私は私のアプリは、設定したいです。私はC:\dirまたは/user/home/dirから私のアプリを実行していた場合、私はアプリケーションコンテキスト内の値は、私が正しくあなたの質問を読んでいた場合、あなたは外部の特性(すなわち、ファイルをされるファイルを使用したいC:\application.propertiesまたは/user/home/dir/application.properties

答えて

2

私は同じような問題を抱えていました。私の要件は、プロパティファイルがアプリケーション内部にバンドルされていない(したがってクラスパスにはない)ということでした。このファイルは、ファイルシステム内の任意の場所に置くことができます。ここ は、環境変数にapplication.propertiesの場所を指しているの値を定義します

  1. 、私はそれを解決する方法です。

を次のように私は

<bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer"> 
     <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> 
     <property name="searchContextAttributes" value="true" /> 
     <property name="contextOverride" value="true" /> 
     <property name="ignoreResourceNotFound" value="true" /> 
     <property name="locations"> 
      <list> 
       <value>file://${APP_PROP_HOME}/application.properties</value> 
      </list> 
     </property> 
    </bean> 
あなたの例を再利用していた場所を定義し、ServletContextPropertyPlaceholderConfigurerを定義しながら、私たちは今、
  • /値/ユーザー/ホーム/ディレクトリにENV変数APP_PROP_HOMEを考えてみましょう

    Springは、$ {APP_PROP_HOME}を対応するenvプロパティに格納された値に解決し、アプリケーションは実行時に構成されます。

  • 0

    のいずれかであることを前提としアプリケーションランタイムクラスパスには含まれません)。それはあなたがファイルのタグを使用する必要がある場合

    <value>file:///c:\application.properties</value> 
    
    +0

    これをメインクラスのアプリケーションコンテキストに挿入するにはどうすればよいですか? – London

    +0

    あなたはこのようないくつかのものを使用してプロパティの場所を挿入することができますが、このプロパティをプロパティーconfigurer に追加することを確認してください。PropertyPlaceholderConfigurer configurer =(PropertyPlaceholderConfigurer)ctx.getBean (PropertyPlaceholderConfigurer.class); \t \tリソースrsc = new FileSystemResource( "file:/// C:\\ Applications \\ one.properties"); \t \t configurer.setLocation(rsc);理由はわかりませんが、スプリングコンテナの起動後にプロパティファイルを挿入すると、コンテキストファイルのプロパティを使用できなくなります。 –

    0

    されている場合は、ENVから値を注入する@Valueを使用することができます。例:

    private someFoo; 
    
    @Value("${systemProperties.someFoo}") 
    public void setSomeParam(String someParam) { 
        this.someFoo = someParam; 
    } 
    
    +0

    PostConstructionHookでこれを動作させることはできません。これらの変数へのアクセスの要件は何ですか? –