wake-up-neo.com

ServletWebServerApplicationContext kann nicht gestartet werden, da die ServletWebServerFactory-Bean fehlt

Wenn ich die Anwendung mit der Hauptanwendung ausführte, wurde der Fehler in consoleUnable zum Starten des Webservers angezeigt. Die verschachtelte Ausnahme ist org.springframework.context.ApplicationContextException: ServletWebServerApplicationContext kann nicht gestartet werden, da die Bean ServletWebServerFactory fehlt.

Hauptanwendung

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

Servlet-Initialisierer

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
}

build.gradle

    buildscript {
        ext {
            springBootVersion = '2.0.0.M4'
        }
        repositories {
            jcenter()
            mavenCentral()
            maven { url "https://repo.spring.io/snapshot" }
            maven { url "https://repo.spring.io/milestone" }
        }
        dependencies {
            classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        }
    }

    plugins {
        id "org.sonarqube" version "2.5"
    }

    apply plugin: 'Java'
    apply plugin: 'idea'
    apply plugin: 'Eclipse-wtp'
    apply plugin: 'jacoco'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'
    apply plugin: 'war'


    group = 'com.demo'
    version = '0.0.1-SNAPSHOT'

    // Uses JDK 8
    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    repositories {
        maven { url "https://repo.spring.io/milestone" }
        jcenter()
        mavenCentral()
        maven { url "https://repo.spring.io/snapshot" }
    }
    configurations {
        providedRuntime
    }
    dependencies {

        // SPRING FRAMEWORK
        compile('org.springframework.boot:spring-boot-starter-web')
        compile('org.springframework.boot:spring-boot-starter-aop')
        compile('org.springframework.boot:spring-boot-starter-actuator')

        // Tomcat Server
        providedRuntime('org.springframework.boot:spring-boot-starter-Tomcat')

        //Spring Jpa
        compile('org.springframework.boot:spring-boot-starter-data-jpa')

        // SPRING SECURITY
        compile('org.springframework.boot:spring-boot-starter-security')

        // MYSQL and HIBERNATE
        compile 'mysql:mysql-connector-Java:5.1.34'
        //compile 'org.hibernate:hibernate-core:5.2.11.Final'
        //compile 'org.hibernate:hibernate-validator:5.1.3.Final'
}

Hilf mir

6
Vinay

Vielleicht kann dies helfen, siehe diese Antwort dank Andres Cespedes Morales :

In dieser Nachricht heißt es: Sie müssen mindestens 1 ServletWebServerFactory-Bean konfigurieren im ApplicationContext festlegen. Wenn Sie also Spring-Boot-Starter-Tomcat bereits haben, müssen Sie entweder müssen Sie diese Bean automatisch konfigurieren oder manuell ausführen.).

Im Test gibt es also nur zwei Konfigurationsklassen zum Laden des applicationContext. Dies sind = {WebsocketSourceConfiguration.class, WebSocketSourceIntegrationTests.class}. In mindestens einer dieser Klassen sollte es eine @Bean-Methode geben, die eine Instanz der gewünschten Instanz zurückgibt ServletWebServerFactory.

  • LÖSUNG *

Stellen Sie sicher, dass Sie alle Beans innerhalb Ihrer Konfigurationsklasse laden

WebsocketSourceConfiguration {
  @Bean 
  ServletWebServerFactory servletWebServerFactory(){
  return new TomcatServletWebServerFactory();
  }
}

ODER aktivieren Sie auch die AutoConfiguration, um einen Classpath-Scan und eine automatische Konfiguration dieser Beans durchzuführen.

@EnableAutoConfiguration
WebsocketSourceConfiguration

Kann auch in der Klasse Integration Test durchgeführt werden.

@EnableAutoConfiguration
WebSocketSourceIntegrationTests

Weitere Informationen finden Sie in der SpringBootTest-Anmerkung Dokumentation https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/context/SpringBootTest.html

4
pie

Ich habe eine Spring-Boot-Anwendung erstellt, bei der für viele JSP-Dateien auch Daten erforderlich waren, um diese Anwendungs- und Datenbankkonnektivität auszuführen. Ich habe den Servernamen, die Portnummer, die ID und das Kennwort in application.properties angegeben geschriebene Java-Klasse:

UserAuthenticationFilter ist meine Java-Klasse, bei der ich eine Verbindung zur MongoDB-Datenbank herstelle und Benutzer-ID und Kennwort mitbringe.

AppLoginSuccessHandler ist eine Klasse, die den Benutzer behandelt, den er/sie sich anmeldet.

AppLogoutSuccessHandler ist eine Klasse für den Benutzer, den er abmeldet.

configure(), in dem ich Berechtigung und Benutzer angegeben habe.

public class SpringSecurityWebAppConfig extends WebSecurityConfigurerAdapter
    {
        @Autowired
        UserAuthenticationFilter userAuthenticationFilter; 
        //this is my Java class to get userId and pass for login site

        @Autowired
        AppLoginSuccessHandler appLoginSuccessHandler; 
        //this is my Java class handler when user login site

        @Autowired
        AppLogoutSuccessHandler appLogoutSuccessHandler;
        //this is my Java class handler when user log out site

        @Bean
        public UserAuthenticationFilter UserDetailsService(){
            return new UserAuthenticationFilter();
        }

        protected void configure(HttpSecurity http){

            try {

                http.authorizeRequests()
                            .antMatchers("/bootstrap/*").permitAll()
                            .antMatchers("/fonts/*").permitAll()
                            .antMatchers("/images/*").permitAll()
                            .antMatchers("/css/*").permitAll()
                            .antMatchers("/js/*").permitAll()
                            .antMatchers("/index.jsp").permitAll()
                            .antMatchers("/accessdenied").permitAll()
                            .antMatchers("/WEB-INF/view/*").permitAll()
                            .antMatchers("/**").access("hasAnyRole('XXX','XXX','XXX',"
                                    + "'XXX','XXX')").
                            anyRequest().authenticated()
                            .and()                              .formLogin().loginPage("/index.jsp").defaultSuccessUrl("/view/dashboardView", true).successHandler(appLoginSuccessHandler)
                            .failureUrl("/index.jsp?error=true")
                            .and()
                            .logout().logoutUrl("/j_spring_security_logout").logoutSuccessHandler(appLogoutSuccessHandler)
                            .and()
                            .exceptionHandling();

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

MvcConfiguration: Ich habe folgenden Code geschrieben Wenn Sie wissen, dass der folgende Code wie DispatcherServlet funktioniert, habe ich eine weitere Klasse geschrieben:

    @SuppressWarnings("deprecation")
    @Configuration
    @EnableWebMvc
    @ComponentScan
    public class MvcConfiguration extends WebMvcConfigurerAdapter{
        public void configureViewResolver(ViewResolverRegistry registry){
            InternalResourceViewResolver resolver = new InternalResourceViewResolver();
            resolver.setViewClass(getClass());
            resolver.setViewNames("org.springframework.web.servlet.view.JstlView");
            resolver.setPrefix("/WEB-INF/view/");
            resolver.setSuffix(".jsp");
        }
    }

Application1 ist meine Hauptklasse von Springboots: Wenn ich diese Klasse starte, bekomme ich einen Fehler: 

org.springframework.context.ApplicationContextException: ServletWebServerApplicationContext kann nicht gestartet werden, da ServletWebServerFactory-Bean fehlt.

    @SpringBootApplication
    @ComponentScan("XXX.XXX.XXX.SpringSecurityWebAppConfig")
    public class Application1 extends SpringBootServletInitializer{

        protected SpringApplicationBuilder configurApplicationBuilder(SpringApplicationBuilder application){
            return application.sources(Application1.class);
        }
        public static void main(String[] args) {
            //SpringApplication.run(Application1.class, args);
            new Application1().configure(new SpringApplicationBuilder(Application1.class)).run(args);
        }

    }
0
pooja