2016-07-01 12 views
0

私はtypesafe configurationのための私の春のブートアプリケーション内のクラスがあります。その後、私は注釈と私の豆のフィールドでそれを使用しようなぜ@ConfigurationPropertiesクラスのデフォルト値が機能しないのですか?

@Component 
@ConfigurationProperties(prefix = "props") 
@Getter 
@Setter 
public class Properties { 
    private String param1 = "val1"; 
    private String param2 = "val2"; 
} 

@Value("${props.param1}")

をしかし、私はまで、アプリケーションの起動時に、次の例外を取得java.lang.IllegalArgumentExceptionが:私はapplication.propertiesによって引き起こさ

で私のカスタムプロパティの値を指定 プレースホルダ「小道具を解決できませんでした。文字列値でのparam1' 『$ {props.param1}』

application.propertiesに値を指定せずにデフォルト値を使用するように春のブートアプリケーションを作成する方法は?

application.propertiesにプロパティを入力し、spring-configuration-metadata.jsonファイル内にdefaultValueがある場合、IDEのデフォルト値が表示されます。私はこのデフォルト値は、私のpropertisファイルで私はそれをoveerideまで春と撮影すると思いますが、私は上記の例外を取得する理由は分かりません。

+0

「Properties」コンポーネントはどのくらい正確に使いましたか? '@ Value'や' @ Autowired'を使う? –

+0

@AliDehghani私は@Valueを使用しました。) – Derp

+0

@AliDehghani私はそれを設定しようとしましたが、私のメインクラスには設定されていませんでした - 違いはありません – Derp

答えて

4

後、私は、注釈と私の豆のフィールドでそれを使用しよう: @Value("${props.param1}")

このいわゆるタイプセーフの設定が強く型付けされた豆をすることができますプロパティで作業する別の方法でありますアプリケーションの構成を管理および検証します。

ConfigurationPropertiesの導入のポイントは、煩雑でエラーが発生しやすい@Valueを使用しないことです。あなたが最初Propertiesクラスを削除してから、次のような@Value("${key:defaultValue}")表記を使用し、@Valueを使用することを主張している場合

@Service // or any other Spring managed bean 
public class SomeService { 
    /** 
    * After injecting the properties, you can use properties.getParam1() 
    * to get the param1 value, which is defaults to val1 
    */ 
    @Autowired private Properties properties; 

    // Other stuff 
} 

@Value("${props.param1:val1}") 
代わり @Valueを使用して、あなたは Properties設定を注入する @Autowiredを使用する必要があります
+0

タイプセーフなプロパティについては間違っていました。説明をありがとう。私は設定クラスのゲッターをどこで使うのですか?ドキュメントによると、私は '@ PostConstruct'メソッドを使うことができます。 – Derp

+0

これらの 'getParam1'、' getParam2'などを意味するならば、それらをSpring管理Bean( '@Repository'、' @ Component'、 '@Service'、' @Configuration')で使うことができます。 Springのブート自体はこれらの設定プロパティを多く使用していました。たとえば、https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/をご覧ください。 org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration.java –

+0

そのリンクで@EnableConfigurationPropertiesアノテーションが表示されていますが、その使用方法はわかりません – Derp

関連する問題