我已经使用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
Tomcat 6
0单元测试或任何类型的自动测试。
Maven依赖关系管理和构建自动化。
半控制器使用注释进行请求响应映射,一半使用simpleFormController模式,一半使用自动装配,一半使用xml连接。
数百个观点,数十个控制器。
到目前为止我采取的步骤:
准备一个(主要是自动化的)回归测试脚本(以便我可以确保我没有破坏任何东西)
我开始一次阅读“升级指南”,“升级到3.1”,“升级到3.2”,并对听起来很熟悉的事情做笔记,但我想我需要对我们的系统有一个更深刻的把握,并且总体而言,在我对此作为一种详尽的方法充满信心之前。这通常感觉像是一种随意的方法,这不是我想要的这种复杂的变化。
我的问题:
对于这样的工作,哪些步骤/程序被视为“最佳做法”?
对于像你这样的工作来说,有什么事情可以作为'陷阱'吗?
答案 0 :(得分:10)
显然,没有标准""标准"一组推荐的做法,因为每次迁移/升级都不同。这是我的想法:
要求,要求,要求
回归测试脚本是一个很好的开始。如果有完整的功能/功能文档,那么您的成功标准"对于迁移来说很简单。
如果文档不完整/不存在,请进行双重和三重检查以确保所有要求'通过测试捕获。创建文档也可能是一个好主意。并让产品经理/主管签字。你会惊讶于有多少人隐藏了#39;即使在简单的系统中也存在要求如果没有全面的要求,就有可能低估迁移所需的工作量。
根据时间表设定正确的期望至关重要。也许一个敏捷的方法,每周两次演示你已经取得了多少进步,这将有助于让每个人都在同一页上。
春季项目已经发展了很多。学习时间预算。
这可能是一个很大的问题。自Spring 3.x以来,Spring项目和Java开发已经发展了很多。重大变化包括:
答案 1 :(得分:3)
嗯,要回答你的问题并不容易,因为有很多事情需要考虑。
首先,我建议您使用直接来自“来源”的Migrating from earlier versions of the Spring Framework guide。
我特别提请您注意“强制最小依赖版本”部分,该部分建议您使用某些广泛使用的库的最低版本级别。 显然,在你插入这些新版本的那一刻,他们带来了一些可能产生冲突的传递依赖。 另请参阅依赖关系更新部分。
还要记住正确定义pom文件中依赖项的范围,因为其中许多可能由您正在使用的基础结构(即Tomcat)提供。
我认为您将需要迁移到Java 7或8,并且Tomcat也应该更新到版本7或更高版本8。
此外,尽量使用maven自动化您的构建和测试环境,同时采用像Jenkins这样的CI环境(如果您更喜欢该产品,还可以使用Hudson)。
对每个小方法/代码进行单元测试也非常重要,因为它可以使集成测试更容易。
您还应熟悉Spring 4.x new features并尝试利用它们,尤其是那些有关测试改进的内容。 新功能的一点简历如下:
另请参阅Petri Kainulainen的Spring MVC Test Tutorial,它可以为您提供有关测试的大量信息。
答案 2 :(得分:1)
在继续操作之前,您必须回答以下问题。
是否需要升级只是某些依赖项的库和运行时?
OR
你真的想要充分利用Spring 4.x吗?
一旦你决定了这一点,你就可以采取正确的方法。您创建的那些回归脚本将有助于这两种方案。如果你能想到一些粗略的一次性实用工具,它会以一些有效的输入击中每个公共api并捕获输出并且能够在两个世界中进行比较,这可能有所帮助,但它可能不适用于你的情况。
因此,如果你想获得Spring 4.x的好处,我会建议你专注于生产力方面并创建这些东西的清单。
您可以在Spring 4中重新设计整个应用程序,就像它是一个新应用程序一样。
一旦你能想象未来的状态。下一个问题减少到从A点到B点,即最佳迁移路径。
答案 3 :(得分:1)
从Spring 3迁移到Spring 4,你可能会从Spring项目中得到一些帮助 {/ 3}}在Github上。
希望它有所帮助!