背景
我们新建的Spring boot项目采用的是Spring boot默认的tomcat容器进行开发(默认9.0.23),我们的程序需要部署到客户的容器中,后面发现客户使用的是tomcat7.0.109版本。所以为了适配,我们需要将项目的tomcat版本减低到Tomcat7.0.109,并将项目打成war包,部署到Tomcat7.0.109上运行。
刚接触Spring boot,发现网上的教程没有让我觉得很详细的,故在此记录。
过程步骤
Spring boot适配Tomcat7
Spring boot默认的适配的Tomcat版本号取决于Spring boot的版本,那么我们我们想要修改Tomcat的版本需要怎么做呢?
一、直接采用修改版本号
首先我们看我们新建的项目内容(pom.xml)
从上可以看出,我们采用的Spring boot版本是2.2.2,那他采用的Tomcat版本是多少呢,我们可以直接ctrl+以上截图位置(2次),然后我们就可以看到查到
这就是我们默认的Tomcat版本,可以运行项目进行对比
证明版本无误,那么我们来修改Tomcat版本
1、直接在pom.xml中覆盖默认的版本
运行项目
版本修改成功,这么简单?是的,如果我们需要修改的Tomcat版本于你使用的Spring boot版本是对应的,则可以直接这样修改,但是我们需要修改的是Tomcat7.0 .109,然后
运行项目,发现
为什么?,在这一步对于新手来说很不友好,而且网络上的很多文章都没有说的很清楚,导致我在这一步用了几个小时,采用网上的各种方法都不行,其实是思路错了。那应该怎样修改呢,这涉及到第二种方法
二、通过降低Spring boot的版本来降低Tomcat版本
首先我们需要知道一个知识点:Spring boot不同的版本采用的tomcat版本是不一样的,或者说不同的Springboot版本对应的Tomcat版本是有限制的。比如我项目中用到的Spring boot2.2.2,采用的Tomcat版本是
发现他适配的是Tomcat9,所以我们在这想通过以上的方式适配Tomcat7是无论如何都不能成功的 。
附上Springboot版本对应Tomcat版本的地址
那么我们的思路就需要转变了,要想适配Tomcat7,则需要减低Spring boot的版本;
这里我们采用Spring boot1.5.9
这里就有一个疑问了,我们通过以上的链接可以查到Spring boot1.5.9对应的Tomcat版本是Tomcat8,那为什么也能适配Tomcat7呢?这里我也不清楚,希望有知道的可以告知!
经过以上的步骤,我们通过减低Spring boot的版本来降低Tomcat版本,并配置Tomcat版本
运行项目
结果已经出来了,Tomcat版本修改成功。当然如果项目中用到了hibernate,同样也需要降低版本,这个在网络上还是能查到有用的信息
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
加入以上代码 运行即可。
可能存在的问题
- hibernate的Dao类中Query和Session的路径需要修改成
- 报错:getCurrentSession报空指针错误,这个错误你可能在网上会查到采用openSession的解决方式,一定不要这样做,因为这样相当于每次都openSession,导致session的连接数很快就会满,报连接数超过的异常,然后你又会去解决连接数并发的错误,无穷无尽,其实也是整个思路错了。解决这个错误我们只需要在application.properties中加入一下代码即可。
spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate5.SpringSessionContext
- 经过以上操作,你的项目已经能正常运行,这个时候你启动客户端发现所有的http地址都报404,然后你又在网上一顿搜索,发现都无法解决你的问题。后面想想404无非就是路径错了,那是不是路径配置有问题呢,我们通过下图就很明了了,修改运行项目,发现接口请求正常
- sql异常,如果你的sql采用了?0,这样的占位符的话,则只要去掉0即可。
经过以上的步骤,Spring boot适配Tomcat7.0.109的工作已经完成,通过以上也能看到这个过程中会遇到很多问题,这个时候需要我们沉下心慢慢思考,每一步骤都采用怀疑的态度去对待网上的资料(包括我这篇),最好弄清楚他报错的底层逻辑,而不是只关注面上的错误日志。
Tomcat打包war
打包的话,资料有很多,但是也少有一查就能正常运行的,这里我附上我找到的这一篇文章吧,步骤很清晰明了,按照操作执行之后效果立竿见影。
需要注意的一点是,打包运行的时候要将内置的Tomcat屏蔽掉(Spring Boot内置了Tomcat,我们打包的时候同样也会将Tomcat打包到war中,然后我们再将war部署到Tomcat中,读这段文字就发现问题了吧,所以我们在打包的时候需要屏蔽掉Spring boot内置的Tomcat),在测试开发阶段则不需要屏蔽Spring boot内置的Tomcat
打包的时候将注释放开,测试运行的时候将注释加上!
以上则是SpringBoot减低版本适配Tomcat7.0.109,并打包部署war包到Tomcat7的全部内容,最后附上Tomcat各版本下载地址
求知若饥、虚心若愚