Spring3.x升级到Spring4.x
Spring升级首先到https://docs.spring.io/spring-framework/docs官方文档查看Spring各个版本的信息,比较不同,确定要升级的版本和要改动的地方。
从官网可以得知***Spring4.3.x版本于2020年12月31日正式停产***,如果不想升级到Spring5.x,可以使用Spring4.3.x版本。
我要升级的项目是非maven项目,且是3.0.6===》4.3.14,可以先看下Spring3.x和Spring4.x的核心框架的区别。
【Spring3与4对比】:
Spring3.x框架由组织为约20个模块的功能组成。这些模块分为核心容器,数据访问/集成,Web,AOP(面向方面的编程),检测和测试,如下图所示。
Spring4.x框架由组织为约20个模块的功能组成。这些模块分为核心容器,数据访问/集成,Web,AOP(面向方面的编程),检测,消息传递和测试,如下图所示。
【区别总结】:
Spring4.x去掉了spring3的struts,添加了messaging(消息传递)和websocket(web通信)
【核心jar包替换】:
【需要注意的点】:
Spring 4.x已经将asm组件整合在 Spring-core 里,直接删掉asm-3x.jar包
transaction在3.2.2以后被放到了spring-tx包下面
web.struts和web.servlet被替换成了webmvc
【更改xsd版本为4.0】:
【升级出现的错误】:
Error creating bean with name 'persistenceExceptionTranslator' defined in URL [jar:file:/F:/.../out/artifacts/.../WEB-INF/lib/spring-tx-4.3.14.RELEASE.jar!/org/springframework/dao/support/PersistenceExceptionTranslator.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
错误提示①spring-tx-4.3.14.RELEASE.jar包下的PersistenceExceptionTranslator的class文件定义错误。
又提示②Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required。
网上查找原因,大概如下:
- 查①,缺失tx的jar包?:不会,jar包有,包下的类也有,并且我的提示并不是没有这个类,而是无法创建bean。
- jar包未编译成功?:不会,在Spring3.x的项目里同样的配置可以运行成功。
- 查②,取消自动注入?:不行,我的项目没用到mybatis,也不是Springboot和maven项目。
解决办法:
请教同事大佬,分分钟看出原因
原因:
applicationContext.xml
配置类中的mybatis扫描配置为所有路径下的dao文件夹,(虽然目前没有用到mybatis),根据错误提示,出错文件路径为dao/support/PersistenceExceptionTranslator.class,正好路径中也包含dao文件夹,spring错误扫描到了这个jar包下的文件,导致报错。
<!-- 映射扫描配置 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="**.*.dao" />
</bean>
解决:
改value="**.*.dao"
为指定路径value="com.*.dao"
大佬说应为jar包缺失导致的,我实在不知道是因为缺哪个包,总之先这么改着,至少项目可以启动了。
【总结】:对比maven项目,非maven项目要手动更新jar包,修改配置文件中spring版本。比较麻烦,如果不确定哪个jar包是否需要,可以启动运行项目,根据错误提示一点点补全jar包。