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");
            }
        }
    }
  • 相关阅读:
    推荐一本不错的书《Sencha Ext JS 5 Bootcamp in a Book》
    Libgdx 1.6.0发布,跨平台游戏开发框架
    《.NET最佳实践》与Ext JS/Touch的团队开发
    【翻译】Sencha Cmd中脚本压缩方法之比较
    【翻译】Ext JS 6早期访问版本发布
    【翻译】Ext JS 6有什么新东西?
    SpringBoot 使用 MyBatis 分页插件 PageHelper 进行分页查询
    Spring boot+Thymeleaf+easyui集成:js创建组件页面报错
    SpringBoot多模块搭建,依赖管理
    IDEA在同一窗口导入多个项目
  • 原文地址:https://www.cnblogs.com/iCanhua/p/8855430.html
Copyright © 2011-2022 走看看