版本管理:maven
以下介绍需要重点关注的点
1、spring-struts.3.0.5包是spring为struts1写的整合插件,此插件支持到struts1 EOL(end of life)的时候就没有了后续版本。升级到Spring5后我们采用了移植spring-struts插件源码的办法来解决这种尴尬。
2、修改spring配置文件的约束头
3、修改集成第三方组件(如quartz、jackson、hibernate等)的注入bean、入口类
1、jackson从1.8.1升级到2.9.7:jackson从1升到2后包名发生了变化,api变化也较大。但总能找到其替代api
2、quartz从1.8.5升级到2.3.0: quartz1升级2后api变化较大,部分删掉启用的api源码注释中没有link,需阅读官方文档获取信息
3、poi升级到3.16,历史版本有XXE漏洞。poi的api变化可以通过阅读源码来找出,源码注释较为规范
4、ehcache从1.2.3升级到2.10.3
Hibernate的变化比较大,主要是API的变化。部分缺失的API搜遍了国内外搜索引擎、大拿博客和知名论坛都找不到一个合适的替代方案。对于一个深度依赖ORM的老项目,平滑移植的想法从一萌生开始就断念了,只能被人逼着硬着头皮搞。
纵观Hibernate3、4、5、6。 其设计标准逐渐向Jpa靠拢,API也是这样。加上springBoot项目的火爆干扰,Spring社区也不会给出Spring5+Hibernate5的老项目升级方案。所幸的事这事总算过去了,现在回头来发发牢骚。
升级步骤:
1、修改hbm映射文件,dtd约束、主键生成策略等。需要注意blob,clob等字段的类型声明,org.springframework.orm.hibernate3.support.BlobByteArrayType和org.springframework.orm.hibernate3.support.ClobStringType在spring5中已被删掉
2、修改获取session的配置项和代码,修改通过session获取connection的方式等
3、元数据的获取方式已发生变化,org.hibernate.cfg.Configuration.getClassMapping(String)已删除。
4、Hibernate5.3+版本的hibernate对Hql占位符的使用有严格要求
5、Hibernate5.2+版本之后createCriteria()、createSQLCriteria()方法均已过时,推荐使用JPA标准API方式
6、修改和spring的集成配置项
7、ehcache升级2.10.3API变化较大,前期为了启动测试关闭了Hibernate二级缓存
8、修改其它变化了的API
Spring5要求使用JDK1.8+编译
...
org.springframework
spring-struts
3.0.5.RELEASE
org.springframework
spring-orm
3.0.5.RELEASE
struts
struts
1.2.9
org.hibernate
hibernate
3.2.7.ga
org.hibernate
hibernate-annotations
3.2.0.ga
...
5.1.5.RELEASE
5.2.18.Final
3.16
...
org.springframework
spring-webmvc
${springframework.version}
org.springframework
spring-jcl
org.springframework
spring-orm
${springframework.version}
org.springframework
spring-context-support
${springframework.version}
struts
struts
1.2.9
org.hibernate
hibernate-core
${hibernate.version}
org.hibernate
hibernate-ehcache
${hibernate.version}
...
spring-jcl是对common-logging的封装,包名和common-logging一致,common-logging的部分api在spring-jcl不存在,使用时会产生冲突。所以spring-webmvc包中排除了对spring-jcl的依赖传递
还需要修改xml约束
改为
|