将大型应用程序从spring 3.0.x升级到4.1.x - 我应该遵循哪些最佳实践/程序?

时间:2015-03-13 15:17:34

标签: java spring spring-mvc

我已经使用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”,并对听起来很熟悉的事情做笔记,但我想我需要对我们的系统有一个更深刻的把握,并且总体而言,在我对此作为一种详尽的方法充满信心之前。这通常感觉像是一种随意的方法,这不是我想要的这种复杂的变化。

我的问题:

  • 对于这样的工作,哪些步骤/程序被视为“最佳做法”?

  • 对于像你这样的工作来说,有什么事情可以作为'陷阱'吗?

4 个答案:

答案 0 :(得分:10)

显然,没有标准""标准"一组推荐的做法,因为每次迁移/升级都不同。这是我的想法:

  1. 要求,要求,要求

    回归测试脚本是一个很好的开始。如果有完整的功能/功能文档,那么您的成功标准"对于迁移来说很简单。

    如果文档不完整/不存在,请进行双重和三重检查以确保所有要求'通过测试捕获。创建文档也可能是一个好主意。并让产品经理/主管签字。你会惊讶于有多少人隐藏了#39;即使在简单的系统中也存在要求如果没有全面的要求,就有可能低估迁移所需的工作量。

    根据时间表设定正确的期望至关重要。也许一个敏捷的方法,每周两次演示你已经取得了多少进步,这将有助于让每个人都在同一页上。

  2. 春季项目已经发展了很多。学习时间预算。

    这可能是一个很大的问题。自Spring 3.x以来,Spring项目和Java开发已经发展了很多。重大变化包括:

    • Java 8功能
    • JavaConfig(与xml配置相对)
    • Acegi现在是Spring Security
    • Spring项目通常使用Spring Boot
    • 从Maven切换到Gradle以构建项目
    • 使用Jenkins(或其他CI工具)的完整CI
    • 单元和集成测试已经转移到使用注释(和模拟框架)

答案 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并尝试利用它们,尤其是那些有关测试改进的内容。 新功能的一点简历如下:

  • 删除了不推荐使用的软件包和方法
  • Java 8支持
  • Java EE 6和7成为基线
  • Groovy Bean Definition DSL
  • 核心容器改进
  • 常规网络改进
  • WebSocket,SockJS和STOMP Messaging
  • 极端使用注释测试改进

另请参阅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上。

希望它有所帮助!