2017-10-04 12 views
2

問題がどこにありますか?@ValueはSpring @Configurationで動作しません

私は

@Configuration 
@PropertySource(value={"classpath:application.properties"}) 
class WebConfig extends WebMvcConfigurerAdapter{ 

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

WebConfig.java

としての性質をロードしているコンフィギュレーション・クラスを持っている私は

MyServerConfigとしての特性を使用しようとしています別の構成クラスを持っています.java

@Configuration 
class MyServerConfig { 

    @Value("${server.url}") 
    private String url; 
... 
} 

application.properties

server.url=http://localhost:8080/test/abc 

しかし取得:

java.lang.IllegalArgumentExceptionが:プレースホルダ 'server.url' を解決できませんでしたが。

ここには何が欠けていますか?何かご意見は? application.propertiesがこのファイルので、特別な方法で設定する必要がない、あなたの@Value変数の値を取得するための

@Configuration 
@PropertySource("classpath:application.properties") 
class MyServerConfig { 

    @Value("${server.url}") 
    private String url; 
} 
+1

なぜ、 'WebConfig'' static'クラスの 'propertySourcesPlaceholderConfigurer'メソッドを作成しましたか? – Jesper

+0

configure ** application.properties **ファイルを投稿できますか? –

+0

@Jesperちょうど私がgoogleで見つけた解決策の1つを試して、静的なものを削除してもメソッドを完全に削除しても動作しません –

答えて

3

は、特定のプロパティが使用されるクラスで@PropertyScanアノテーションを使用します常にスキャンされます。したがって、@PropertySource注釈とPropertySourcesPlaceholderConfigurer beanを削除してください。

他の.propertiesファイル(たとえばconstants.propertiesdb-config.properties)を追加する場合に使用します。

だから、それらを削除して、再び

非常に重要なアプリケーションを実行しよう:

  1. は、あなたのBootApplicationは、いくつかのパッケージ内にある場合は、(@Value注釈を使用するクラスをスキャンしていることを確認します'main'パッケージの代わりに、適切な@SpringBootApplication(scanBasePackages = { "com.my.project" })注釈を追加してください)。

  2. application.propertiesは、あなたがクラスパスにあることを確認します

ボーナスあなたは(例:proddev)春のプロファイルを使用している場合、あなたはまた、スキャンされapplication-prod.propertiesapplication-dev.propertiesファイルを持つことができ、あなたが実行しているプロファイルに応じて含まれています。

+0

既に試しました!私のために働いていない。 –

+0

エラーがありますか? "私のために働いていない"私にあなたに合った解決策を見つけるのに役立ちません。 –

+0

そして、それはちょうどここで働いていませんが、同様の方法でそれは@Serviceクラスで働いています –

0

関連する問題