将大型应用程序从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,在我对此作为一种详尽的方法充满信心之前。 这通常感觉像是一种随意的方法,这不是我想要的这种复杂的变化。

我的问题:

  • 对于像这样的工作,哪些步骤/程序被认为是“最佳实践”?

  • 对你这样的工作来说,有什么东西可以作为’陷阱’吗?

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

  1. 要求,要求,要求

    回归测试脚本是一个很好的开始。 如果有完整的function/function文档,那么迁移的“成功标准”很简单。

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

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

  2. 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迁移指南中获得一些帮助。

希望它有所帮助!