基本配置完工之後,剩下的就是啓動了,啓動的過程中,主要遇到兩個問題:
問題一: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 命名轉換及映射的描述。