2017-07-03 10 views
0

私はスプリングブートアプリケーションを持っています。私は自分のアプリケーションのすべての設定を提供する設定サービスアプリケーションを持っています。私は、アプリケーションのすべての設定をプルしてコンテキストに入れるクライアントを作成しました。アプリケーションがうまく働いていた。このような構成とスプリングデータの初期化の問題

@Configuration 
public class PersistentConfiguration { 

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

    @Value("${db.user}") 
    private String serverDbUser; 

    @Value("${db.password}") 
    private String serverDbPassword; 


    public DataSource dataSource() { 
     return new SingleConnectionDataSource(serverDbURL, serverDbUser, serverDbPassword, true); 
    } 
} 

@Configuration 
public class ContextConfiguration { 

    @PostConstruct 
    public void getContextConfiguration(){ 
     ConfigServiceResponse configurations = configurationServiceClient.getConfigurations(configurationEnv); 
     Properties properties = generateProperties(configurations.getConfigParameterList()); 

     MutablePropertySources propertySources = env.getPropertySources(); 

     propertySources.addFirst(new PropertiesPropertySource("APPLICATION_PROPERTIES", properties)); 
    } 
} 

はまた、私はデータソースを設定するためのJavaクラスを作成しました: 私はこの仕事をしてJavaクラスを作成しました。私がSpring Dataに移行するまで。アプリが起動している間、私は依存関係を追加した後

compile("org.springframework.boot:spring-boot-starter-data-jpa") 

が、私は例外を見ることができます:私はちょうどGradleの構成に依存関係を追加

エラー名「persistentConfiguration」でBeanを作成: インジェクションのautowired依存関係は失敗しました。ネストされた例外は java.lang.IllegalArgumentExceptionがある:私は、アプリケーションが問題なく起動し、依存関係を削除した場合、「値に$ {} db.url

をプレースホルダ 'db.url' を解決できませんでした

。春はそれがとても似PersistentConfigurationDependsOn annotationを追加し、あなたのContextConfiguration最初に処理する必要があります知ってもらうためには、クライアントを設定しても、起動されていなかったデータを得るためにそれを呼び出す前のクラス

答えて

1

に:。

@DependsOn("contextConfiguration") 
@Configuration 
public class PersistentConfiguration { 
    ... 

PersistentConfigurationの中には、前者が後者によってのみ初期化された変数しか使用しないため、ContextConfigurationに依存していることをSpringに伝えるものはありません。

これはまさにDependsOnが対象です。 JavaDocから:

指定されたBeanは、このBeanより前のコンテナによって作成されることが保証されています。 Beanが明示的に他のプロパティまたはコンストラクタの引数に依存しないで、別のBeanの初期化の副作用に依存する場合には、まれにしか使用されません。

+0

ありがとうございました!それは助けになった – migAlex