web-dev-qa-db-ja.com

Spring Boot:EmbeddedServletContainerFactory Beanがないため、EmbeddedWebApplicationContextを起動できない

私はSpringが全く初めてで、このサイトから公式ガイドを作り始めました: https://spring.io/guides

このガイドを読みたい: https://spring.io/guides/gs/scheduling-tasks/

私は次の例外が出ます:

2014-02-14 16:25:21.614  INFO 9032 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.scheduling.annotation.SchedulingConfiguration' of type [class org.springframework.scheduling.annotation.SchedulingConfiguration$$EnhancerByCGLIB$$5b48d763] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2014-02-14 16:25:21.638  INFO 9032 --- [           main] .c.l.ClasspathLoggingApplicationListener : Application failed to start with classpath: [file:/C:/work/Spring/SpringTutorial/target/classes/, file:/C:/work/Apache-maven-3.0.3/repo/javax/servlet/javax.servlet-api/3.0.1/javax.servlet-api-3.0.1.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-starter/1.0.0.RC1/spring-boot-starter-1.0.0.RC1.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/boot/spring-boot/1.0.0.RC1/spring-boot-1.0.0.RC1.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/spring-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/spring-context/4.0.0.RELEASE/spring-context-4.0.0.RELEASE.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-autoconfigure/1.0.0.RC1/spring-boot-autoconfigure-1.0.0.RC1.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-starter-logging/1.0.0.RC1/spring-boot-starter-logging-1.0.0.RC1.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf4j-1.7.5.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/slf4j/jul-to-slf4j/1.7.5/jul-to-slf4j-1.7.5.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/slf4j/log4j-over-slf4j/1.7.5/log4j-over-slf4j-1.7.5.jar, file:/C:/work/Apache-maven-3.0.3/repo/ch/qos/logback/logback-classic/1.0.13/logback-classic-1.0.13.jar, file:/C:/work/Apache-maven-3.0.3/repo/ch/qos/logback/logback-core/1.0.13/logback-core-1.0.13.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-starter-web/1.0.0.RC1/spring-boot-starter-web-1.0.0.RC1.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/boot/spring-boot-starter-Tomcat/1.0.0.RC1/spring-boot-starter-Tomcat-1.0.0.RC1.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/Apache/Tomcat/embed/Tomcat-embed-core/7.0.47/Tomcat-embed-core-7.0.47.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/Apache/Tomcat/embed/Tomcat-embed-logging-juli/7.0.47/Tomcat-embed-logging-juli-7.0.47.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/spring-web/4.0.0.RELEASE/spring-web-4.0.0.RELEASE.jar, file:/C:/work/Apache-maven-3.0.3/repo/aopalliance/aopalliance/1.0/aopalliance-1.0.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/spring-aop/4.0.0.RELEASE/spring-aop-4.0.0.RELEASE.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/spring-beans/4.0.0.RELEASE/spring-beans-4.0.0.RELEASE.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/spring-webmvc/4.0.0.RELEASE/spring-webmvc-4.0.0.RELEASE.jar, file:/C:/work/Apache-maven-3.0.3/repo/org/springframework/spring-expression/4.0.0.RELEASE/spring-expression-4.0.0.RELEASE.jar, file:/C:/work/Apache-maven-3.0.3/repo/com/fasterxml/jackson/core/jackson-databind/2.3.1/jackson-databind-2.3.1.jar, file:/C:/work/Apache-maven-3.0.3/repo/com/fasterxml/jackson/core/jackson-annotations/2.3.0/jackson-annotations-2.3.0.jar, file:/C:/work/Apache-maven-3.0.3/repo/com/fasterxml/jackson/core/jackson-core/2.3.1/jackson-core-2.3.1.jar, file:/C:/work/Apache-maven-3.0.3/repo/commons-lang/commons-lang/2.2/commons-lang-2.2.jar]
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:140)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:476)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.Java:124)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.Java:658)
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:355)
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:920)
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:909)
    at hu.kumite.Application.main(Application.Java:17)
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:190)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.Java:163)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.Java:137)
    ... 7 more

アプリケーションスタータークラスは次のとおりです。

@ComponentScan
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(ScheduledTasks.class, args);
    }
}

ご覧のとおり、mainメソッドにはコメント行が含まれています。私はすでにチュートリアル、つまりこれをやっています: https://spring.io/guides/gs/consuming-rest/ それは稼働しています。しかし、ScheduledTasksアプリケーションを実行することはできません。これは次のとおりです。

@EnableScheduling
public class ScheduledTasks {

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    @Scheduled(fixedRate = 5000)
    public void reportCurrentTime() {
        System.out.println("The time is now " + dateFormat.format(new Date()));
    }
}

私はEclipseを使い、Application.Javaのメインをアプリケーションとして実行します。誰かが私を助けてもらえますか?

157
Kumite

スケジューリングガイドはWebアプリケーションではないので、RESTガイドのpom.xmlにはかっこいいものがあるでしょうか。指示に厳密に従うならば、それはうまくいくはずです。あなたが上で投稿したコードに関するもう一つの潜在的な問題はあなたの@EnableAutoConfigurationクラスがメインメソッドとしてだけコンテキストで使用されないということです(これはスケジューリングガイドにとって問題ではないかもしれませんが、それはたぶん他のもののためです)。

61
Dave Syer

@SpringBootApplicationをスキャンすると、次のアノテーションが含まれていることがわかります。

@Configuration
@ComponentScan
@EnableAutoConfiguration

だからあなたもこれを行うことができます:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
       SpringApplication.run(ScheduledTasks.class, args);
    }
}
47
HClark

あなたのpom.xmlでこれを使う:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
</dependency>

またはこれ:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-Tomcat</artifactId>
</dependency>
28
Pasha Gharibi

これを試して

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
       SpringApplication.run(ScheduledTasks.class, args);
    }
}
22

このエラーは、実行しようとしているアプリケーションがApache Tomcatのインスタンスをインスタンス化できないことを示唆しています。 Tomcatでアプリケーションを実行していることを確認してください。

すべての依存関係を調べた後に同じ問題が発生した場合は、構成クラスに次の行を追加してください。

@Bean
public EmbeddedServletContainerFactory servletContainer() {
    TomcatEmbeddedServletContainerFactory factory = 
                  new TomcatEmbeddedServletContainerFactory();
    return factory;
 }

Tomcatの外部インスタンスを使用している場合(特にintellijの場合)、問題はIDEが組み込みTomcatを起動しようとしていることです。この場合、pom.xmlから以下を削除してから、「構成の編集」ウィザードを使用して外部Tomcatを構成します。

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-Tomcat</artifactId>
     <scope>provided</scope>
</dependency> 
18
Thomas Mwania

1つのSpring Bootプロジェクトに複数のアプリケーションクラスが含まれていて、その中にWebが含まれていて、そのうちの1つに対してWeb環境を構成しないようにしたいので、手動で以下のように構成しました。

@SpringBootApplication
public class Application
{
    public static void main(String[] args)
    {
        new SpringApplicationBuilder(Application.class)
            .web(false)
            .run(args);
    }
}

_ update _ Spring Boot 2以降の場合:

@SpringBootApplication
public class Application
{
    public static void main(String[] args)
    {
        new SpringApplicationBuilder(Application.class)
            .web(WebApplicationType.NONE)
            .run(args);
    }
}
17
Robert Hunt

追加する

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
11
Sagar

intellijの使用中にこの例外が発生し、アプリケーションをrunボタンで起動しようとしている場合。代わりにコマンドラインからアプリケーションを起動してみてください。例えば。これがspringbootアプリケーションの実行mvn spring-boot:runであると仮定して、正しいディレクトリ(pomファイルのあるディレクトリ)にいることを確認してください。

加えて、私はあなたのSpringアプリケーションが他のアプリケーションに依存しているときにもこのエラーが発生するのを見ました。この場合、最初に他のアプリケーションを起動してから実行する必要がありました。

7
Marquis Blount

アノテーション@SpringBootApplicationを追加するスタータークラスが私のためにこの問題を解決する前に(つまり本質的に、このエラーメッセージは "あなたはどこにも@SpringBootApplicationとマークされたクラスを持っていません。

@SpringBootApplication
public class AppStarter {

    public static void main(String[] args) {
        SpringApplication.run(AppStarter.class, args);
    }
}
5
Ahmed Tawila

メインメソッドがSpringApplcation.run()に渡されたものとは異なるクラスにあるとき、私は同様の問題を抱えていました

だから解決策はあなたがコメントアウトした行を使うことでしょう:

public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
4
afaulconbridge

あなたがそれを単一のjarとしてパッケージ化していて、それが非ウェブアプリであるならば、以下のようにアプリコンテキストをロードすることを試みなさい。

@SpringBootApplication

ApplicationContext ctx = new AnnotationConfigApplicationContext(Main.class);

または、以下のプラグインを使って単一のjarファイルとしてパッケージすることもできます。

             <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

下記のコマンドを実行して外部設定を指定できます。

Java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

/ http://docs.spring.io/spring-boot/docs/current/reference/htmlboot-features-external-config.html#boot-features-external-config-application-property-files

プロパティを引数として渡す場合は@PropertySource("classpath:test.properties")を含めないでください。これはパラメータをオーバーライドします。

3

pom.xmlが存在することを確認してください

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-Tomcat</artifactId>
    </dependency>

私はこのような問題を抱えていた;この依存性が足りないため

2
chao.lv

SpringApplicationはあなたに代わって正しいタイプのApplicationContextを作成しようとします。デフォルトでは、Webアプリケーションを開発しているかどうかに応じて、AnnotationConfigApplicationContextまたはAnnotationConfigEmbeddedWebApplicationContextが使用されます。

「Web環境」を決定するために使用されるアルゴリズムはかなり単純化されています(いくつかのクラスの存在に基づく)。デフォルトを上書きする必要がある場合はsetWebEnvironment(boolean webEnvironment)を使用できます。

setApplicationContextClass(…​)を呼び出して使用されるApplicationContext型を完全に制御することも可能です。

[ティップ] JUnitテストの中でSpringApplicationを使うときはsetWebEnvironment(false)を呼ぶのが望ましいことがよくあります。

2
leimbag

コマンドラインgradle bootRunで実行するためにコマンドラインgradle jarでjarファイルにパッケージ化しながら、コマンドラインJava -jar build/libs/demo.jarを使用して正常に実行した場合、残念ながら、例外:Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory beanで失敗します。この場合は、タスクbootRepackage /を使用する必要があります。プラグインspring-bootをグラドル化して、特別な実行可能jarを生成します。

  • 設定1

    $ gradle clean bootRepackage

  • 設定2

    $ Java -jar build/libs/demo.jar

2
Binhong Wu

Spring Bootスターターの依存関係を追加することで私のエラーが修正されました。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Tomcatを埋め込みサーバーとして起動したい場合、これは必須です。

2
Gulzar Hemani

私の場合は、プロダクションモードのTestApplicationクラスとテストモードのApplicationクラスを無視するために、@Profileアノテーションを新たに追加しましたとしています。

残念ながら、application.propertiesファイルに次の行を追加するのを忘れていました。

spring.profiles.active=test
or
spring.profiles.active=production

これらの設定がなければ、プロファイルはロードされず、それほど意味のないSpringエラーが発生しました。

1
hb0

これは依存関係の問題が原因で発生します。一般に、依存関係を確認する必要があります。

1
richard

明確なリポジトリ は解決策の1つです。

Windows - > Mavenリポジトリ内のすべてのサブフォルダを削除します。

C:\ Users\YourUserName.m2\repository

1

問題はこのクラスにあります:

@ComponentScan
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
    //SpringApplication.run(Application.class, args);
    SpringApplication.run(ScheduledTasks.class, args);
    }
}

アプリケーションを起動する正しい方法は次のとおりです。

@SpringBootApplication
@EnableScheduling
public class Application {
    public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    }
}
1
Paolo Mastinu

私の場合は、次のコードを使用してpomからリソースフォルダーを除外した後に発生します。

<resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>*/*.properties</exclude>
            </excludes>
        </resource>
</resources>

このコードにコメントすると私のコードが始まりました。

0
Root

問題はスターターTomcatの除外です、私はそれを除外してvert.xを使用しようとしました、それで私がSpring Adminと統合するとき、問題を始めました

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-Tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
0

おそらくあなたのスプリングブートスタータークラスに @SpringBootApplication がありません。

@SpringBootApplication
public class LoginSecurityAppApplication {

    public static void main(String[] args) {
        SpringApplication.run(LoginSecurityAppApplication.class, args);
    }

}
0
vishal thakur

次の状況でこの例外が発生しました。

私のPOMでプロパティでした:

<properties>
    <Java.version>1.8</Java.version>
    <!-- The main class to start by executing Java -jar -->
    <start-class>com.scmaer.Java.microservice.Application</start-class>
    <cxf.version>3.1.5</cxf.version>
    <olingo.version>2.0.10</olingo.version>
    <spring.boot.version>1.4.7.RELEASE</spring.boot.version>
    <spring.boot.plugin.version>1.5.8.RELEASE</spring.boot.plugin.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <skipTests>false</skipTests>
</properties>

そして私のアプリケーションクラスの名前とパス( "start-class")が間違っていました。

0
Igor

私は同様の問題を抱えていて、問題は壊れたmavenリポジトリのjarファイルでした。私の場合、Tomcat-embed-core jarファイルは壊れていました。そこで私はそれをMavenリポジトリから削除し、再度ダウンロードできるように更新しました。

0
rokwoon kim

この問題の他の原因は、Mavenリポジトリjarの破損であるため、問題を解決するために次のコマンドを使用できます。

mvn dependency:purge-local-repository
0

私は同じ問題で立ち往生しています。 Mavenを使ってSpring-BootでMain.classと次のアノテーションを定義しなかったので:

@SpringBootApplication
public class Main {
    public static void main(String args[]){
        SpringApplication.run(Main.class, args);
    }
}
0
David Stiffen