不改一行代码将servlet工程改造成springboot工程
碰到一个项目,web接口是最基础的servlet3.0,业务逻辑的部分实现还用到了spring beans,web的入口是web.xml,通过tomcat运行。所以web.xml基本上是下面这样:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/spring/*.xml</param-value>
</context-param>
<filter>
</filter>
<servlet>
</servlet>
其他项目都是spring boot,这个“特殊”的项目导致整个团队的技术栈不统一,且这个工程基本用不到很方便的springboot封装,很多时间都需要自己造轮子。
有没有办法改造成SpringBoot工程呢?其实servlet改springboot的迁移指导网上可以搜出来一大把,但基本都是大刀阔斧整个工程直接重构,这种做法对于已经上线的具有流量的重量级服务肯定不可取。
怎样在不修改一行代码的情况下切换到spring boot工程呢?
去掉spring contextloader
熟悉spring mvc的同学应该都知道,spring mvc是如何转载bean的,关键其实就在web.xml的ContextLoaderListener这个Listener,ContextLoaderListener继承ServletContextListener ,这样web启动时执行contextInitialized方法,看下面源码,这时候初始化了WebApplicatonContext。
public class ContextLoaderListener extends ContextLoader implements ServletContextListener {