将大型应用程序从Spring 3.0.x升级到4.1.x – 我应该遵循哪些最佳实践/程序?
我已经使用Spring大约一年了,而且我很舒服地使用它,但是我在大多数情况下都避免跳过引擎盖。
我的任务是升级从Spring 3.0.x到Spring 4.1.x的大型关键任务企业应用程序。
制作像这样的大型,不可避免的挑剔和复杂变化的最佳实践是什么? (任何超出‘扔进jar文件,看看会发生什么’和‘阅读文档: http : //spring.io/ ‘会非常有帮助)
系统:
-
Java 6 – jax-b / -p / -ws /,Apache Commons,
-
Spring 3.0.5 – 通常(核心,上下文,bean等),MVC,AOP,ORM,JDBC,Acegi
-
Hibernate 3.5
-
雄猫6
-
0unit testing或任何类型的自动测试。
-
Maven依赖管理和构建自动化。
-
半控制器使用注释进行请求响应映射,一半使用simpleFormController模式,一半使用自动assembly,一半使用xml连接。
-
数百个观点,数十个控制器。
到目前为止我采取的步骤:
-
准备一个(主要是自动化的)回归测试脚本(以便我可以确保我没有破坏任何东西)
-
我开始一次阅读“升级指南”,“升级到3.1”,“升级到3.2”,并对听起来熟悉的事情做笔记,但我想我需要更深入地了解我的系统,以及一般的spring,在我对此作为一种详尽的方法充满信心之前。 这通常感觉像是一种随意的方法,这不是我想要的这种复杂的变化。
我的问题:
-
对于像这样的工作,哪些步骤/程序被认为是“最佳实践”?
-
对你这样的工作来说,有什么东西可以作为’陷阱’吗?
显然,不会有“标准”的推荐做法,因为每次迁移/升级都是不同的。 这是我的想法:
-
要求,要求,要求
回归测试脚本是一个很好的开始。 如果有完整的function/function文档,那么迁移的“成功标准”很简单。
如果文档不完整/不存在,则进行双重和三重检查以确保通过测试捕获所有“要求”。 创建文档也可能是一个好主意。 并让产品经理/主管签字。 即使在简单的系统中,您也会惊讶于存在多少“隐藏”要求。 如果没有全面的要求,就有可能低估迁移所需的工作量。
根据时间表设定正确的期望至关重要。 也许一个敏捷的方法,每周两次演示你所取得的进展将有助于让每个人都在同一页上。
-
Spring项目已经发展了很多。 学习时间预算。
这可能是一个很大的问题。 自Spring 3.x以来,Spring项目和Java开发已经发生了很多变化。 重大变化包括:
- Java 8的function
- JavaConfig(与xml配置相对)
- Acegi现在是Spring Security
- Spring项目通常使用Spring Boot
- 从Maven切换到Gradle用于构建项目
- 使用Jenkins(或其他CI工具)的完整CI
- 单元和集成测试已经转移到使用注释(和模拟框架)
嗯,要回答你的问题并不容易,因为有很多事情需要考虑。
首先,我建议您使用从早期版本的Spring Framework指南迁移,该指南直接来自’source’。
我特别提请您注意“强制最小依赖性版本”部分,该部分建议您使用某些广泛使用的库的最低版本级别。 显然,在你插入这些新版本的那一刻,他们带来了一些可能产生冲突的传递依赖。 另请参阅依赖关系更新部分。
还要记住在pom文件中正确定义依赖项的范围,因为其中许多可能由您正在使用的基础结构(即Tomcat)提供。
我认为您将需要迁移到Java 7或8,并且Tomcat也应该更新到版本7或更高版本8。
此外,尝试使用maven自动化您的构建和测试环境,同时采用像Jenkins这样的CI环境(如果您更喜欢该产品,则采用Hudson)。
对每个小方法/代码进行unit testing也非常重要,因为它将使集成测试更容易。
您还应熟悉Spring 4.x的新function,并尝试利用它们,尤其是那些有关测试改进的function。 新function的一点简历如下:
- 删除了不推荐使用的包和方法
- Java 8支持
- Java EE 6和7成为基准
- Groovy Bean定义DSL
- 核心容器改进
- 一般网站改进
- WebSocket,SockJS和STOMP消息传递
- 通过极大地使用注释来测试改进
另请参阅Petri Kainulainen的Spring MVC测试教程 ,它可以为您提供有关测试的大量信息。
在继续之前,您必须回答以下问题。
是否需要升级只是某些依赖项的库和运行时?
要么
你真的想要充分利用Spring 4.x吗?
一旦你做出决定,你就可以采取正确的方法。 您创建的那些回归脚本将有助于这两种方案。 如果你能想到一些原始的一次性实用程序,它将以一些有效的输入击中每个公共api并捕获输出并且能够在两个世界中进行比较,这可能有所帮助,但它可能不适用于您的情况。
因此,如果您想获得Spring 4.x的好处,我建议您关注生产力方面并创建这些东西的清单。
您可以在Spring 4中重新设计整个应用程序,就像它是一个新的应用程序一样。
一旦你能想象未来的状态。 下一个问题减少到从A点到B点,即最佳迁移路径问题。
从Spring 3迁移到Spring 4,您可能会从Github上的Spring项目的Spring Integration 3.0到4.0迁移指南中获得一些帮助。
希望它有所帮助!