2016-12-06 10 views
7

私は@SpringBootApplication秒の少数のクラスパス上の@Configurationクラス次ているロードされていない:私は別の名前で(この設定を使用する2つのサービスがあり春ブーツ:コンフィギュレーションクラスは単に無視され、

@Configuration 
@Import({MainConfig.class, RestConfig.class}) 
public class ApiConfig { 

    @Bean 
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) 
    public Client client() throws ExecutionException, InterruptedException { 
     return service.create(Client.class); 
    } 

} 

Clientクラス)。

サービス1が正しく起動し、この設定を読み込みます。起動時にタイプApiConfigのbeanが熱心に初期化されているのがわかります。

サービス2が正しく開始されません。上記の構成クラスは単純に無視され、初期化されません。

サービスは別々のJVMで開始されます。

spring.application.name=xxx-api 
server.port=0 
eureka.name=xxx.api 
# Only for reading properties from a central location 
context.initializer.classes=com.package.contextClass 

私は疑問に書くことができ、追加情報の種類でもよく分からない:

THERのサービスはほぼ同じ、非常に小さなapplication.propertiesファイルを持っています。私は今ログを2〜3時間に渡って見てきましたが、わかりやすい違いは見られません。単純に私の@Configurationクラスを無視しています。

誰もこの問題を以前に持っていましたか?

+0

この設定クラスはどのようにロードされるはずですか?あなたはあなたのSpringブートブートストラップを表示しませんでした。 – chrylis

+0

申し訳ありませんが、 '@ContentScan'と' @ EnableAutoConfiguration'を使って、 '@ SpringBootApplication'を使って読み込まれることになっています。 – user991710

+2

どちらの場合も、Springbootアプリケーションクラスと同じパッケージの@Configurationクラスがありますか? –

答えて

18

@SpringBootApplicationアノテーション(またはより正確には@ComponentScanアノテーション)は、デフォルトで注釈付きクラスの横と下のクラスパスのみをスキャンします。

したがって、構成クラスは、アプリケーションクラスのサブパッケージ内またはそのサブパッケージに配置する必要があります。

+0

これは正解でした。ありがとうございました! – user991710