整個項目是用spring boot+mybatis+jsp構成的
首先來吐槽一下整個項目中的坑點
1.maven的包管理和依賴管理
2.spring boot真的拋棄jsp了嗎?
3.打包方式用jar還是war?
4.tomcat是用內置還是外置?
5.本地開發環境和發佈到生產環境有什麼不同?
現在我就帶着問題一個一個的回答
1.maven的包管理和依賴管理
在這個項目,經常出現某個類找不到的情況,但是在引用的那個jar包裏面確實存在,那就很可能是包依賴的版本有問題,比如我們引入了一個包A,版本爲1.1,然後有另一個包B依賴了包A,但是依賴的版本的爲1.0,這時有可能我們在工程中用到的就是包A的1.0版本,首先我們用mvn dependency:tree來找出所有包的依賴關係,看是哪個類依賴了某個類的低版本,然後在pom裏面那個類下把依賴的類給排除掉,例如
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-cas</artifactId>
<version>${shiro.version}</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
如果從pom依賴關係裏面找不到,那就需要查一下本地有沒有直接引用不通過maven管理的第三方包
2.spring boot真的拋棄jsp了嗎?
不得不說,spring boot真的要慢慢拋棄jsp了,支持的模版是像FreeMarker,Groovy,Thymeleaf,Mustache這些(一上來就三四個,咱程序猿可是真心苦逼啊),目前還是可以用,往後新的項目就慢慢轉吧。
3.打包方式用jar還是war?
一開始我是想用jar來打包,網上也有成功的案例springboot中集成jsp,打成jar包可用jsp,但是我這個項目用jar打出來的包可以啓動,但是頁面請求死活出不來,那個成功案例裏提到需要用spring-boot-maven-plugin的1.4.2版本來打包,高於1.4.2版本打出來的包有問題,很不幸,我的項目如果改用1.4.2版本的話其他地方各種報錯,改完一個又來一個,最後無奈放棄這種方案。最後是打成war包可以運行
4.tomcat是用內置還是外置?
網上很多都是推薦外置,但是我覺得用內置方式也沒有什麼不好,線上配合supervisor工具發佈很方便,supervisor這個工具很好用,可以自動管理(開啓,停止,重啓)程序的運行
5.本地開發環境和發佈到生產環境有什麼不同?
本地intellij idea配置的環境運行很少問題,倒是發佈到線上的時候各種問題一大堆。生產環境就是像我第4點提到的使用supervisor把程序後臺運行,執行通過 java -jar xxx.war