重构SpringBoot项目


最近在学习微服务的过程中,需要将之前学到的SpringBoot项目重构。

个人在学习过程中参考 慕课网小马哥的 Spring Boot 2.0深度实践-初遇Spring Boot 这门课程是免费的。如果博客阐述不当,可以去看看小马哥的视频,大佬绝对把你教会。

1. what?(什么是重构)

这是借用下百度的定义

重构(Refactoring)就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。

个人理解:举个例子:保存用户信息的过程中,Controller层负责接收用户信息,Service层负责对用户信息进行处理,Dao层负责将用户信息保存到数据库中。当然系统中不仅只有保存用户信息的业务操作。还有用户信息修改,用户注销等等,越来越多的业务出现,系统就会变得很臃肿。

2. why? (为什么要重构)

我们将系统划分为三个模块,表示层web,持久层persistence,模型层model。我们将项目启动的类,与用户进行数据交互的逻辑放在web表示层,将与数据库交互的逻辑放在persistence持久层,将保存信息的实体保存在model模型层。这样就显得业务划分和结构就变得很清晰

3. how? (怎么样重构)

首先将pom.xml中的packaging改成pom

创建项目中的模块。右键点击项目 -> New -> Module

显示如下页面。点击Next

填写需要创建模块的名字。继续点击Next

如下图所示,创建好的模块的pom.xml中,<parent>是依赖于项目的pom.xml

将系统的业务代码迁移到相应的模块中,会发现模块中的文档样式是不一样的。这时候需要进行一些调改。

进入到project structure。点击mian中的java,在点击Mark as中的Sources。显而易见,javawenjianjia 变成原有项目的样子。

如果出现想启动类上边画了个X的样子,还是选择点击右边的绿色三角的话。

你将会看到下边的提示 错误: 找不到或无法加载主类 FirstRefactorDemoApplication。这时得找到项目的启动类进行重新启动

启动项目:找到web模块中的启动类,右键+Run启动项目。

按照自己的要求将项目中的接口,实体类等迁移到各个模块之后,你是否会发现下面这种情况。项目中满屏都是红色的,那是因为,这些实体类在迁移到各个模块之后,他们之间还没有任何联系,import导入的依赖是找不到原来的依赖的。解决办法:通过配置的方式,将各个模块联系起来。

<dependencies>
  <dependency>
    <groupId>com.xh</groupId>
    <artifactId>model</artifactId> 
    <version>0.0.1-SNAPSHOT</version>
  </dependency>
</dependencies>

artifactId:所需要依赖的模块名称

groupIdversion:可参照pom.xml文件中的parent中的配置。

注:每次修改pom.xml文件都必须在文件中右键+maven+reimport进行重新刷新

项目打包

打开idea的终端命令行Terminal。运行如下命令

$ mvn -Dmaven.test.skip=true -U clean install

发现这时候项目打包出问题,显示repackage failed: Unable to find main class。无法找到主类(main class)

如果你的项目是多个模块的项目,则需要在包含启动类的(web)模块的pom.xml中添加如下配置。

这块配置仅针对多模块的项目配置。

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
+      <configuration>
+        <mainClass>com.xh.product.ProductApplication</mainClass>
+      </configuration>
    </plugin>
  </plugins>
</build>

spring-boot-maven-plugin下配置configuration中的配置。mainClass中配置项目的启动类的路径。

配置完成之后,则再次执行上边的打包命令。打包好的jar默认会放在电脑配置的仓库中。

引用自定义生成的jar包

如需要将打包好的jar给其他项目进行调用,则需要在其他项目pom.xml中引入。可参照我的进行配置。配置完成刷新pom.xml文件

<dependency>
  <groupId>com.xh</groupId>
  <artifactId>product-client</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</dependency>

配置完成之后,再次刷新pom.xml文件。这时项目就会根据下图的过程找到你的jar包并引入到项目中


 上一篇
spring cloud config spring cloud config
学习Spring Cloud Config 要学习这部分的知识需要先了解配置中心的工作流程 配置中心服务器端配置中心的依赖 <dependency> <groupId>org.springframework.cloud
2020-08-18
下一篇 
抽象类和接口 抽象类和接口
前言:当面试官在问到我这块知识点的时候,我整个人脑子只是冒出来interface和abstract这两个关键字。仅说出了接口和抽象类各自的特征,但是二者之间的异同点答得不是很好,这块知识点老是记不住,还是需要通过代码来了解比较直观。 接
2020-08-12
  目录