先说总结:这过程中发现最主要的问题就是SpringBoot每个版本都有所改变,可能在上个版本可以适用,但下一个版本就不可以。因此需要查下资料看看使用的版本是否支持。
顺序:先从dao层迁移->service层->web层
1. 在dao迁移时遇到的问题:jar包依赖冲突,这个问题原本很头痛,因为以前看网上的说法特别复杂,需要输入各种指令然后自己找哪几个包冲突之类的。后来发现一篇文章说利用maven插件:maven helper可以帮助我们快速查看哪几个包的版本冲突并且排除掉!
参考博客:在IDEA中解决jar包冲突_chetui2456的博客-CSDN博客
首先是Redis的config在配置时出现了循环依赖的错误,此错误经过发现是Springboot后来的版本禁止了循环依赖,以前的版本会对它自动进行处理。两种解决方式:
- 用ApplicationContext手动注入bean,不采用自动注入@Autowried在application.properties中设置spring.main.allow-circular-references=true
此处采用了第二种方案,可行。但遇到了新的问题:依旧是redis的问题
Could not get a resource from the pool
经过查询,发现是本地需要先开启redis-server才可以。这个连环坑让我差点自闭还好多看了好几篇文章解决了第一个坑,第二个坑偶然间有个直觉是我没启动redis才出现的问题。
3.在做web迁移时遇到的问题:首先遇到的问题是:
Unable to locate the default servlet for serving static content. Please set the 'defaultServletName' property explicitly.
说的是MvcConfiguration里面的这段代码出现了问题:
@Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); }
原因是Spring Boot2.4发行说明中所述,默认情况下,嵌入式Servlet容器提供的DefaultServlet不再注册。如果您的应用程序需要它,就像您的应用程序所做的那样,您可以通过将server.servlet.register-default-servlet设置为true来启用它。(依旧走了版本不再支持的大坑)
在application.properties:
#解决redis的依赖循环 spring.main.allow-circular-references=true #解决MvcConfiguration中的嵌入式Servlet容器提供的DefaultServlet不再注册 server.servlet.register-default-servlet=true
解决后,又遇到spring boot 找不到 httpServletMapping,这里依旧是SpringBoot版本导致的:因为每个springboot不同版本内置的tomcat都不一样!!(得知原因后简直要疯,Springboot说方便但缺遇到这么多版本坑,这里禁止、那里禁止…
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getHttpServletMapping()javax/ser...
网上的这篇博客无法解决我的问题但可以参考:
- 有网友是用降低spring boot版本改为2.0.4或2.0.8解决或者是照上面的方法解决,按照自己的tomcat版本加入:8.5.37
到了这里,我的问题依旧没有解决。又疯狂搜索了很多文章,终于在这篇的评论里解决了!【附上评论:如果是SSM,可以将pom依赖里的servlet-api这个依赖的scope改为provided,应该是和tomcat自带的冲突了】
我把它改为这样,然后成功开启了mvc,太不容易了:



