2016-08-01 13 views
3

モジュールテストや一般的なWebアプリケーションの起動時間を短縮するため、コンポーネントのスキャンを避けようとしています。ComponentScanを使用せずにSpringブートWebアプリケーションを起動するには

私は@SpringBootConfiguration @EnableAutoConfiguration@SpringBootApplicationを交換するとき、私は次のエラーを取得する:

Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean

は私が手動で何とかEmbeddedServletContainerFactoryをインポートすることはできますか?

+0

はい、コードがサードパーティ製のライブラリであっても、コード内の構成(注釈付き構成)を「複製」することができます。実際には、何らかの理由で設定を上書きする必要がある場合に便利です。私のテストでは、コンポーネントスキャンを使用するかどうかの違いはごくわずかです。私はそれを避けるだろう。 – rdllopes

+2

'org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration'を見てください。これは、spring-bootが 'EmbeddedServletContainerFactory'を生成する方法です。私は理由を知りたい場合は条件をデバッグしてみてください。なぜなら、あなた自身の工場を登録したいのであれば、適切な 'EmbeddedServletContainerFactory 'EmbeddedServletContainerAutoConfiguration'からのBean設定です。 – Pieter

答えて

2

MilošおよびPieterは、答えを見つける手段を提供した。最小限の春ブーツWebアプリケーションは、次のように起動することができます。

@SpringBootConfiguration 
@Import({EmbeddedServletContainerAutoConfiguration.class}) 
public class Application extends SpringBootServletInitializer { 
    ... 
} 

ServerPropertiesAutoConfiguration.classは、アプリケーションのポート番号のようなものをピックアップする便利かもしれません。

3

まず、デバッグフラグをオンにしてアプリケーションを実行し、アクティブ化されたすべての自動構成を書き留めてください。次に、自動構成を無効にし、アプリケーションクラスで@Importを使用してこれらの構成をインポートします。

また、これらの設定クラスのそれぞれを見て、Springブートの設定を参照して、独自の設定を提供するかどうかを決めることができます。自動設定クラスを模倣するだけで、方法。

関連する問題