2013-01-17 4 views
10

私はBeanを作成するためにSpring Java configを使用しています。 しかし、このBeanは2つのアプリケーションに共通です。 両方とも、プロパティファイルabc.propertiesを持っていますが、クラスパスの場所は異なります。 私は@PropertySourceのクラスパスワイルドカード

@PropertySource("classpath:/app1/abc.properties") 

のように明示的にクラスパスを入れると、それが動作しますが、私は

@PropertySource("classpath:/**/abc.properties") 

のようなワイルドカードを使用しようとすると、それは動作しません。 私はワイルドカードの多くの組み合わせを試していますが、まだ動作していません。 ワイルドカードが使用されています@ProeprtySource @Configurationsと記されたクラス分けされたプロパティには他に読み取り方法がありますか?

答えて

13

@PropertySourceのAPI:Resource location wildcards (e.g. **/*.properties) are not permitted; each location must evaluate to exactly one .properties resource.

回避策:春3.1 PropertySourcesPlaceholderConfigurerがPropertyPlaceholderConfigurer上で優先的に使用されなければならないとBeanは静的である必要がありますので

dmay回避策に

@Configuration 
public class Test { 

    @Bean 
    public PropertyPlaceholderConfigurer getPropertyPlaceholderConfigurer() 
      throws IOException { 
     PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer(); 
     ppc.setLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/**/abc.properties")); 
     return ppc; 
    } 
+1

メソッドの '@Configuration'クラスの中で' @ Autowired'、 '@Resource'、' @PostConstruct'のようなアノテーションを処理できない場合このコンテナのライフサイクルの問題を避けるために 'static'修飾子をこのメソッドに追加します; '@Bean詳細はjavadocを参照してください。 しかし、ありがとう、これは魅力のように働いた。 –

6

Addidtionallyを試してみてください。 。 `Bean`方法Test.getPropertyPlaceholderConfigurer @非静的であり、春のBeanFactoryPostProcessorインターフェースに割り当てたオブジェクトを返す。これは、になり - 310:」ConfigurationClassEnhancerは:展開しながら所定の` static`修飾子が警告を防止する追加

@Configuration 
public class PropertiesConfig { 

    @Bean 
    public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() { 
    PropertySourcesPlaceholderConfigurer propertyConfigurer = new PropertySourcesPlaceholderConfigurer(); 
    propertyConfigurer.setLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/**/abc.properties")); 
    return propertyConfigurer; 
    } 

} 
+1

+1あなたの日を保存しました – sjngm

+0

これは、「未処理例外タイプIOException」 – Lucky