zoukankan      html  css  js  c++  java
  • 记一次Springboot启动异常

      启动Springboot项目报以下异常:

      

    org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:155) ~[spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:544) ~[spring-context-5.0.5.RELEASE.jar:5.0.5.RELEASE]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
        at hello.Application.main(Application.java:13) [classes/:na]
    Caused by: org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getWebServerFactory(ServletWebServerApplicationContext.java:204) ~[spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:178) ~[spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:152) ~[spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
        ... 8 common frames omitte

      很明显是提示Application无法获取ServletWebServerFactory实例,首先要注意, 由于Springboot在以往使用Spring都要配置下提供了集成方案,所以最简单的方法就是采用默认的配置,解决方法非常简单,只需在你的启动类中加入@EnableAutoConfiguration,当然你也可以手动配置,如下为自动配置。

    package hello;
    
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.Bean;
    
    import java.util.Arrays;
    @EnableAutoConfiguration
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
        @Bean
        public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
            return args -> {
    
                System.out.println("Let's inspect the beans provided by Spring Boot:");
    
                String[] beanNames = ctx.getBeanDefinitionNames();
                Arrays.sort(beanNames);
                for (String beanName : beanNames) {
                    System.out.println(beanName);
                }
    
            };
        }
    }

      手动配置请参考官网,地址:https://docs.spring.io/spring-boot/docs/2.0.1.BUILD-SNAPSHOT/reference/html/howto-embedded-web-servers.html#howto-configure-tomcat

      下面配一个全部手动配置的代码,其中@value标签的内容需要自己写properties文件:

    package com.gws.configuration;
    
    import org.apache.catalina.connector.Connector;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
    import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
    import org.springframework.boot.web.servlet.MultipartConfigFactory;
    import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import javax.servlet.MultipartConfigElement;
    
    
    /**
     * 使用tomcat配置
     *
     * @version 
     * @author 
     * 
     */
    @Configuration
    public class TomcatConfig {
    
        @Value("${spring.server.port}")
        private String port;
        @Value("${spring.server.acceptorThreadCount}")
        private String acceptorThreadCount;
        @Value("${spring.server.minSpareThreads}")
        private String minSpareThreads;
        @Value("${spring.server.maxSpareThreads}")
        private String maxSpareThreads;
        @Value("${spring.server.maxThreads}")
        private String maxThreads;
        @Value("${spring.server.maxConnections}")
        private String maxConnections;
        @Value("${spring.server.protocol}")
        private String protocol;
        @Value("${spring.server.redirectPort}")
        private String redirectPort;
        @Value("${spring.server.compression}")
        private String compression;
        @Value("${spring.server.connectionTimeout}")
        private String connectionTimeout;
    
        @Value("${spring.server.MaxFileSize}")
        private String MaxFileSize;
        @Value("${spring.server.MaxRequestSize}")
        private String MaxRequestSize;
    
        @Bean
        public ServletWebServerFactory servletContainer() {
            TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
            tomcat.addConnectorCustomizers(new GwsTomcatConnectionCustomizer());
            return tomcat;
        }
    
        @Bean
        public MultipartConfigElement multipartConfigElement() {
            MultipartConfigFactory factory = new MultipartConfigFactory();
            //  单个数据大小
            factory.setMaxFileSize(MaxFileSize); // KB,MB
            /// 总上传数据大小
            factory.setMaxRequestSize(MaxRequestSize);
            return factory.createMultipartConfig();
        }
    
        /**
         *
         * 默认http连接
         *
         * @version
         * @author liuyi  2016年7月20日 下午7:59:41
         *
         */
        public class GwsTomcatConnectionCustomizer implements TomcatConnectorCustomizer {
    
            public GwsTomcatConnectionCustomizer() {
            }
    
            @Override
            public void customize(Connector connector) {
                connector.setPort(Integer.valueOf(port));
                connector.setAttribute("connectionTimeout", connectionTimeout);
                connector.setAttribute("acceptorThreadCount", acceptorThreadCount);
                connector.setAttribute("minSpareThreads", minSpareThreads);
                connector.setAttribute("maxSpareThreads", maxSpareThreads);
                connector.setAttribute("maxThreads", maxThreads);
                connector.setAttribute("maxConnections", maxConnections);
                connector.setAttribute("protocol", protocol);
                connector.setAttribute("redirectPort", "redirectPort");
                connector.setAttribute("compression", "compression");
            }
        }
    }
  • 相关阅读:
    (转)【web前端培训之前后端的配合(中)】继续昨日的故事
    ural(Timus) 1136. Parliament
    scau Josephus Problem
    ACMICPC Live Archive 6204 Poker End Games
    uva 10391 Compound Words
    ACMICPC Live Archive 3222 Joke with Turtles
    uva 10132 File Fragmentation
    uva 270 Lining Up
    【转】各种字符串哈希函数比较
    uva 10905 Children's Game
  • 原文地址:https://www.cnblogs.com/iCanhua/p/8855430.html
Copyright © 2011-2022 走看看