1.背景
上古SSM项目,因安全漏洞需要升级框架,现记录下遇到的几个问题
2.升级
1.SpringMVC升级完之后接口404
依赖 | 升级前版本 | 升级后版本 |
---|---|---|
spring相关(core、bean、tx、aop等) | 4.1.6.RELEASE | 5.3.27 |
spring-web | 4.1.6.RELEASE | 5.3.27 |
spring-webmvc | 4.1.6.RELEASE | 5.3.27 |
Spring、SpringMVC等相关版本从
4.1.6.RELEASE
升到了5.3.27
。升级完之后,原来能够访问的接口,报错404。
经debug多次测试,发现后缀的问题。分析源码,发现useSuffixPatternMatch
默认设置为false
,即后缀匹配模式默认不启用。注释中显示,5.2.4之后,貌似直接废弃了此设置。
手动设置开启即可,在spring-mvc.xml中,添加或修改以下代码,开启后缀匹配模式
<mvc:annotation-driven>
<mvc:path-matching suffix-pattern="true"/>
</mvc:annotation-driven>
2.mybatis、mybatis-spring
依赖 | 升级前版本 | 升级后版本 |
---|---|---|
mybatis | 3.3.0 | 3.5.6 |
mybatis-spring | 1.2.3 | 2.0.5 |
升级mybatis依赖版本之后,报错: |
java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer;
原因是,mybatis-spring版本与mybatis版本不匹配,详细内容参考官网
升级了spring,也对应升级了mybatis,而mybatis-spring版本还是1.3.4,显然不符合条件。
3.注意
mybatis、mybatis-spring版本问题,很早就发现了。按照匹配版本修改,测试一直不通过。好一顿折腾,发现项目中依赖已经成功换了,但是运行的war包中的依赖还是旧版本。如果,大家有类似的问题,注意清理一下/target下的旧包(真的坑)。