34

を使用するために、maven pom に依存関係spring-bootを追加して使用しています。spring-webRestTemplate

ここで、Spring は を初期化しようとしますEmbeddedServletContext。どうすれば防ぐことができますか?

Exception in thread "main" org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:474)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:957)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:946)
Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:183)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:156)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)
    ... 8 more
4

5 に答える 5

36

参考までに: このユース ケースは、Spring Boot リファレンス ガイドに記載されています。

すべての Spring アプリケーションが Web アプリケーション (または Web サービス) である必要はありません。メソッドでコードを実行するmainだけでなく、Spring アプリケーションをブートストラップして使用するインフラストラクチャをセットアップする場合はSpringApplication、Spring Boot の機能を使用すると簡単です。Aは、Web アプリケーションが必要かどうかによってクラスをSpringApplication変更します。ApplicationContextそれを助けるために最初にできることは、サーブレット API の依存関係をクラスパスから除外することです。それができない場合 (たとえば、同じコード ベースから 2 つのアプリケーションを実行している場合) は、明示的に を呼び出すか、 (Java API または外部プロパティを使用して) プロパティをSpringApplication.setWebEnvironment(false)設定できます。ビジネス ロジックとして実行するアプリケーション コードは、 として実装し、としてコンテキストにドロップapplicationContextClassできます。CommandLineRunner@Bean意味。

アプリケーションのプロパティ:

spring.main.web-environment=false   #webEnvironment property
于 2015-04-22T14:40:20.840 に答える
28

最初のトリック:

public static void main(String[] args) throws Exception {
    ConfigurableApplicationContext ctx = new SpringApplicationBuilder(Application.class)
                .web(false)
                .run(args);
}

2番:

@Configuration
@EnableAutoConfiguration(exclude = WebMvcAutoConfiguration.class)
public class Application {
于 2015-04-22T14:32:48.250 に答える
16

Web 環境を無効にする従来の方法 (@Tim の回答に記載) は Spring Boot 2.x でも機能しますが、新しい推奨される方法は、次のプロパティを設定することです。

spring.main.web-application-type=none

許可される値を定義する列挙型は次のとおりです

于 2017-10-04T15:44:18.940 に答える