热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用springboot重构一个五年前的项目是什么体验?(一)

文章目录前言为什么要重构?1.原先spring架构可维护性越来越低2.集成新技术的成本变高3.各种不同环境的问题依然时不时的会存在4.重构过程能对更多的技术细节进行深

文章目录

  • 前言
    • 为什么要重构?
      • 1. 原先spring架构可维护性越来越低
      • 2. 集成新技术的成本变高
      • 3. 各种不同环境的问题依然时不时的会存在
      • 4. 重构过程能对更多的技术细节进行深入学习
    • 重构清单
      • 项目结构重构
      • 配置文件从原先的xml到完全properties
      • 各类jar包从单独到结成starter方式的重构
      • 单元测试保证重构后的系统功能
    • (一)项目结构重构
    • 小结




前言

最近把一个从2015年开发至今的一个个人项目从传统的spring彻底重构成springboot项目,用了大概一个多月的时间,里面的坑还是挺多的,但是收获也是满满,记录一下,希望能帮助那些准备或者在做这一步的朋友(有任何问题都可以私信我,非常乐意解答)。

为什么要重构?


1. 原先spring架构可维护性越来越低


  • 刚开始xml+配置文件的方式感觉没什么,但是随着各种参数、动态配置的增加xml中引用properties中的变量使得开发人员维护变得越来越复杂(我一个人维护有时候都找半天), 而springboot的约定大于配置理念使配置基本框架配置变得清晰易维护
  • springboot查问题更加简单:由于配置都非常固定,区别原先spring方式各种不同的配置,亲测出错概率大大降低,极大提升了维护性。
  • 由于原生spring,得自己管理各种jar包,所以会出现各种jar包冲突等一些列的问题,这大大降低了维护性, 而springboot则有对应开发的starter,各种版本都做到了统一,出错概率也大大降低。

2. 集成新技术的成本变高


  • 由于springcloud的发展,springboot变成了一个基础的架构,而如果还是沿用原来的spring xml配置的方式文档和资料变的越来越少,机会成本也变大了。反观springboot资料变得越来越丰富集成一个新的框架或者替换都是分分钟的事情

3. 各种不同环境的问题依然时不时的会存在


  • 由于原先spring的方式,或多或少都会依赖外部的容器去做启动,虽然刚开始可能没什么问题,但是随着各种依赖以及开发和测试环境的不同,偶尔会出现本地测试好好的,而一发布到测试就会有各种问题,而springboot内嵌容器就非常好的解决了这个问题,容器被打包在了发布jar中,隔离了不同环境因素,使得发布出现问题的概率大大降低

4. 重构过程能对更多的技术细节进行深入学习


  • 重构能迫使自己对原先的代码细节重新梳理,思考原先架构的合理性
  • 重构过程会对各种第三方依赖做梳理,能够更好的了解细节
  • 重构的过程遇到了很多的问题,解决的过程恰恰是宝贵的财富

重构清单


  • 项目结构重构

  • 配置文件从原先的xml到完全properties

  • 各类jar包从单独到结成starter方式的重构

  • 单元测试保证重构后的系统功能


(一)项目结构重构

从spring到springboot由于“ 约定大于配置”的理念简化了很多配置,项目的分层结构也可以做一次重构,不需要沿用原来spring的方式,做到更加简单和清晰。
原来的结构目录:
在这里插入图片描述
结构大致是 biz作为基础的公用组件, web为前端,采用springmvc(虽然现在流行前后端分离架构,但是独立开发也还ok,后期准备拆分)、 schedule为定时任务、还有back和service 分别是后台管理和对外微服务这两个就不详细展开。

web模块依赖biz模块,而本身里面又分为base、home、war,项目的结构比较的复杂(主要是原来公司的一个规范),这里主要改造的点:

  • springboot mvc项目不需要打包成war,所以直接干掉war模块
  • 保留home模块(各种Controller),base作为打包模块也保留

改造完成后结构:在这里插入图片描述
改造完成以后可以看出只有core模块和package打包模块,比较清晰,很多刚接触maven的小伙伴会疑问为什么要单独package模块做打包用,不是可以直接打包吗,这里正好提一下,也是这次重构的收获:
如果是单独模块的maven项目,其实没什么难度,都只有一个pom打包成jar只需要

<packaging>jarpackaging>

就可以打包&#xff0c;但是如果项目有公共模块&#xff0c;需要聚合别模块这样maven的项目结构就会变得稍微复杂一点&#xff1a;
在这里插入图片描述

这里的package模块只做部分聚合用&#xff0c;这里就是聚合了公用biz和web模块&#xff1a;&#xff08;如果对maven多模块感兴趣的朋友后面我会考虑单独出一篇&#xff09;&#xff0c;而原先war模块存在的原因就是要打包成war&#xff0c;不过springboot打成jar会更方便所以直接取消了war模块变得更加简单&#xff0c;对于新上手的程序员会更加友好。

小结

这篇主要大致梳理了原先spring老项目为什么重构&#xff0c;和如何开始重构&#xff0c;重构的过程虽然很多坑很苦但是收获还是很大的&#xff0c;后面的文章会沿着重构清单继续下去&#xff0c;有任何问题都可以留言或者私信我&#xff0c;我会认真回答~~


推荐阅读
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 本文详细探讨了几种常用的Java后端开发框架组合及其具体应用场景。通过对比分析Spring Boot、MyBatis、Hibernate等框架的特点和优势,结合实际项目需求,为开发者提供了选择合适框架组合的参考依据。同时,文章还介绍了这些框架在微服务架构中的应用,帮助读者更好地理解和运用这些技术。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 本教程详细介绍了如何使用 Spring Boot 创建一个简单的 Hello World 应用程序。适合初学者快速上手。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 2021年Java开发实战:当前时间戳转换方法详解与实用网址推荐
    在当前的就业市场中,金九银十过后,金三银四也即将到来。本文将分享一些实用的面试技巧和题目,特别是针对正在寻找新工作机会的Java开发者。作者在准备字节跳动的面试过程中积累了丰富的经验,并成功获得了Offer。文中详细介绍了如何将当前时间戳进行转换的方法,并推荐了一些实用的在线资源,帮助读者更好地应对技术面试。 ... [详细]
  • 在Java分层设计模式中,典型的三层架构(3-tier application)将业务应用细分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层结构不仅有助于提高代码的可维护性和可扩展性,还能有效分离关注点,使各层职责更加明确。通过合理的设计和实现,三层架构能够显著提升系统的整体性能和稳定性。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
author-avatar
qqjayzhe
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有