記一次Springboot啟動異常
阿新 • • 發佈:2018-04-16
figure trac new rtc ttr org ext b-s nested
啟動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"); } } }
記一次Springboot啟動異常