2016-04-02 15 views
0

アプリケーションにBeanが存在しない場合は、そのBean固有のプロパティをBean作成に登録します。例Beanの初期化にBean固有のプロパティを動的に登録する方法

public class BeanOne { 
    @Value("${prop1}") 
    private String property1; 
} 

public class BeanTwo { 
    @Value("${prop2}") 
    private String property2; 
} 

のために私は正常に上記の2つのBeanをインスタンス化するために、プロパティ「PROP1」と「PROP2」を登録したいです。

私のアプリケーションはspring-cloud-consul-configで設定されています。デフォルトではconsulはこれらのプロパティでは設定されていませんが、アプリケーションはecwid/consul-apiを通じてこれらのプロパティをconsulに自動的に登録します。

現在、アプリケーションは "文字列のプレースホルダ 'prop1'を解決できませんでした。" IllegalArgumentException "値「$ {PROP1}」

上記のエラーを回避するための任意の提案。

答えて

0

あなたがこれを行うことができ、様々な方法があります。

私の好ましいアプローチは、外部から一個の以上のファイルのプロパティを設定することですその後、@PropertySource( "file:/// full-pat h-to-property-file ")アノテーションを@Configurationクラスに追加します。

このアプローチをSpringプロファイルと組み合わせることは非常に強力です。

例あなたがプロファイルを使用していない場合:

  1. は、あなたのPC上のどこかにapplication.propertiesファイルを作成します。これを置くのに良い 場所は、$ {}のuser.home /です。somefolder/application.properties
  2. が変更PROP1とPROP2
  3. の値そのフォルダやファイルのパーミッションを追加します。たとえば、 .somefolderでchmod uを実行し、プロパティファイルでchmod 600を実行することができます。
  4. Spring Java Configurationクラスを作成し、 @Configurationでアノテートします。次のように@PropertySource注釈を追加します。たとえば、あなたの春のブートアプリケーションのサブパッケージにApplicationConfig クラスを作成することができますし、@Configuration
  5. と それに注釈を付ける: @PropertySource( "ファイル:/// $ {ユーザーを。ホーム}/somefolder/application.properties ")春ブーツ、AWS、ブートストラップやストライプの私courseから

例:。

@Configuration 
@EnableJpaRepositories(basePackages = "com.devopsbuddy.backend.persistence.repositories") 
@EntityScan(basePackages = "com.devopsbuddy.backend.persistence.domain.backend") 
@EnableTransactionManagement 
@PropertySource("file:///${user.home}/.devopsbuddy/application-common.properties") 
public class ApplicationConfig { 
} 

それです!

関連する問題