spring Boot (五) 启动problem
基本配置完工之后,剩下的就是启动了,启动的过程中,主要遇到两个问题:
问题一:java.lang.NoClassDefFoundError: javax/servlet/ServletContext
2016-06-17 11:04:14.216 ERROR 4684 --- [ main] o.s.boot.SpringApplication : Application startup failed
java.lang.NoClassDefFoundError: javax/servlet/ServletContext
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)
at java.lang.Class.getDeclaredMethods(Class.java:1855)
其实就是忘记在web层添加层级依赖,光记得在父类假如了对javax.servlet的Maven依赖,web层启动的时候找不到,所以则报错了。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
在web层pom文件中加上即可。
问题二:@Override is not allowed when implementing interface method
pom文件中配置maven-compiler-plugin(可以避免每个人都要按照解决方案一设置一次)
问题三:启动依赖冲突,重复
默认情况下,Spring Boot使用Tomcat来作为内嵌的Servlet容器。但是SpringBoot启动,我们优先选择spring-boot-starter-undertow Maven依赖来代替Tomcat,进而提升性能,这种情况下,我们则必须把tomcat从依赖中移除:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--springBoot中移除tomcat-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
<version>${spring.boot.version}</version>
</dependency>
<!--加载spring-boot-starter-undertow-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
<version>${spring.boot.version}</version>
</dependency>
至于性能提高多少,我们则可以专门进行一下测试。通过Java VisualVM工具则可以明显的观察到:
看两者的对比,我只是简单的对内存和线程进行了一下对比,课件堆的使用情况以及线程数,undertow启动都是占优势的,我仅仅是简单的启动SpringBoot,在执行的同一时间截图观察的情况。在平常的复杂业务启动过程中,我相信undertow启动的优势会更大。
问题四:beetlSQL实践需要注意命名转换的问题,详情下一篇对beetlSQL 命名转换及映射的描述。