整个项目是用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