itsource

스프링 부트:Embedded Servlet Container Factory 빈이 없어 Embedded Web Application Context를 시작할 수 없습니다.

mycopycode 2022. 8. 15. 21:35
반응형

스프링 부트:Embedded Servlet Container Factory 빈이 없어 Embedded Web Application Context를 시작할 수 없습니다.

저는 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);
    }
}

보시는 바와 같이 메인 메서드에는 코멘트된 행이 포함되어 있습니다.저는 이미 튜토리얼을 했습니다.이 튜토리얼은 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()));
    }
}

이클립스를 사용하여 응용 프로그램을 실행합니다.java의 메인 어플리케이션입니다.누가 좀 도와주실래요?

스케줄 가이드는 웹 앱이 아니기 때문에 REST 가이드의 pom.xml에 곰팡이가 핀 것이 있을 수 있습니다.지시사항을 잘 따르면 작동될 것입니다.의 또 다른 의 코드의 입니다.@EnableAutoConfiguration 수 있지만 가 되지 않을 수 있습니다).class 는 、 class 、 class class(((( ( class class class( but but but but but but but but but but but but but but but class class class class class class class class class class class class class class class ( class ) 。

★★★의 스캔@SpringBootApplication에는 다음 주석이 포함되어 있음을 나타냅니다.

@Configuration
@ComponentScan
@EnableAutoConfiguration

이 작업도 수행할 수 있습니다.

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

이것을 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>

1개의 Spring Boot 프로젝트에서 여러 응용 프로그램클래스가 포함되어 있어 그 중 하나의 웹 환경을 구성하는 것을 피하고 싶었기 때문에 다음과 같이 수동으로 설정했습니다.

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

Spring Boot 2 이후 업데이트:

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

이거 드셔보세요

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

이 오류는 실행하려는 응용 프로그램이 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> 

더하다

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

사용 중 이 하여 intellij를 하여 응용 하려고 할 run버튼을 클릭합니다.디렉토리가 올바른 디렉토리(pom 파일을 확인해 주세요.이것은 「」, 「」(pom이라고 가정합니다.springboot run " " " 。mvn spring-boot:run이게 날 속였어

또한 스프링 어플리케이션이 다른 어플리케이션에 의존하는 경우에도 이 에러가 발생하는 것을 보았습니다.이 경우 먼저 다른 애플리케이션을 실행하고 실행해야 했습니다.

추가 중 " " "@SpringBootApplication이 으로 " a no have a no have a no have a new first"를할 수 .@SpringBootApplication「1」, 「1」)

@SpringBootApplication
public class AppStarter {

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

메인 메서드가 Spring Application.run()에 전달된 것과 다른 클래스에 있을 때도 비슷한 문제가 있었습니다.

그 때문에, 코멘트한 행을 사용하는 것이 해결책입니다.

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

하나의 jar로 패키징하여 웹 앱이 아닌 경우 아래와 같이 앱 콘텍스트를 로드해 보십시오.

@SpringBootApplication

ApplicationContext ctx = new AnnotationConfigApplicationContext(Main.class);

또는 아래 플러그인을 사용하여 단일 항아리로 패키지화

             <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")보다 우선합니다.

라인을 사용하여 되었을 gradle bootRun 라인으로 할 때, 「」를 참조해 주세요.gradle jarjava -jar build/libs/demo.jar도 예외: " " " " 에 Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean는 '태스크'를 bootRepackage 플러그인 gradle의 spring-boot특별한 런너블 항아리를 만들 수 있습니다.

  • § 1

    $ gradle 클린 부트 리패키지

  • § 2

    $ java - jar build/libs/build.jar

A SpringApplication의 '만들기'를 .ApplicationContext당신을 대신해서.「」입니다.AnnotationConfigApplicationContext ★★★★★★★★★★★★★★★★★」AnnotationConfigEmbeddedWebApplicationContext웹 어플리케이션 개발 여부에 따라 사용됩니다.

'웹 환경'을 결정하는 데 사용되는 알고리즘은 상당히 단순합니다(몇 개의 클래스의 존재에 기반함).하시면 됩니다.setWebEnvironment(boolean webEnvironment)★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

또, 이 시스템을 완전하게 제어할 수도 있습니다.ApplicationContext호출에 의해 사용되는 유형setApplicationContextClass(…​).

[Tip] 종종 전화하는 것이 바람직하다setWebEnvironment(false)사용할 때SpringApplicationJUnit 테스트에 포함되어 있습니다.

스프링 부트 스타터 의존 관계를 추가하면 오류가 수정되었습니다.

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

이것은 Tomcat을 임베디드 서버로 시작하는 경우에 필요합니다.

pom.xml이 존재하는지 확인합니다.

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

나는 이런 문제가 있었다; 이 의존성이 부족하기 때문에

이 경우 프로덕션 모드의 Test Application 클래스와 테스트 모드의 Application 클래스를 무시하기 위해 @Profile 주석을 새로 추가했습니다.

유감스럽게도 application.properties 파일에 다음 행을 추가하는 것을 잊었습니다.

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

이러한 설정이 없으면 프로파일이 로드되지 않기 때문에 스프링 에러라고 하는 그다지 많지 않습니다.

이는 의존관계 문제로 인해 발생할 수 있으며 일반적으로 의존관계를 확인해야 합니다.

이 클래스의 문제:

@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);
    }
}

clear repository는 가능한 해결책 중 하나입니다.

Windows -> maven 저장소의 모든 하위 폴더를 삭제합니다.

C:\사용자\YourUserName.m2\repository

나는 같은 문제를 안고 있다.Maven을 사용한 Spring-Boot에서 Main.class와 다음 주석을 정의하지 않았기 때문에:

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

스프링 부트 스타터 클래스에 @Spring Boot Application이 없을 수 있습니다.

@SpringBootApplication
public class LoginSecurityAppApplication {

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

}

문제는 starter 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>

다음과 같은 상황에서 이 예외가 발생했습니다.

내 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')의 이름과 경로가 잘못되어 있습니다.

저도 비슷한 문제가 있었는데, 문제는 부서진 maven repo jar 파일입니다.저 같은 경우에는tomcat-embed-corejar 파일이 파손되었습니다.그래서 maven repo에서 삭제하고 새로 고쳐서 다시 다운받았어요.

내 경우 리소스 폴더를 에서 제외시킨 후에 발생합니다.pom다음 코드를 사용합니다.

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

이 코드에 코멘트를 달아서 내 코드가 시작되었습니다.

maven 보고 어울리지 않는다의 이 문제의 다른 원인은 부패는 문제를 해결하기 위해 다음과 같은 명령을 사용할 수 있습니다..

mvn dependency:purge-local-repository

나는 commandLineRunner kafka 주제와 들어오는 고리 등을 받기 위한 건강 검진 끝점을 소비하셨으니, 나는 만났다 gradle seem 문제 사용하고 있습니다.나는 알아내는 것은 마침내 나는 spring-boot-starter-web과 mybatis-spring-boot-starter 것을 발견해, 그리고 그들은 충돌이 12시간을 보냈다.후반부에 나는 직접 mybatis고 mybatis-spring-boot-starter보다는 spring-jdbc mybatis-spring고 프로그램의 효과를 잘 소개했다.

이는데 도움이 되기를 바라

예상대로 내 경우에는, 봄 구성을 로드하지 않았다.cmd 명령 아래를 사용하는 것을 실행하는,: 일했다.

start java -Xms512m -Xmx1024m <and the usual parameters as needed, like PrintGC etc> -Dspring.config.location=<propertiesfiles> -jar <jar>

언급URL:https://stackoverflow.com/questions/21783391/spring-boot-unable-to-start-embeddedwebapplicationcontext-due-to-missing-embedd

반응형