观察的问题

系统中有重复的部分,需要重构

1610803427997.png

重构思想

  在cloud-consumer-order80中,我们需要实体类,只需要将实体类放到该工程中即可,不需要加@Id @KeySql注解,但是呢?我现在需要重构工程,需要将工程中实体类提取出来,这时候会遇到一个问题,提供者实体类需要加@Id @KeySql注解,消费者实体类不需要加@Id @KeySql注解,是不一样的

  那该如何提取呢?答案是数据库实体类是提取不出来了,其实要硬生生的提取也是可以的,只是你在消费者的配置文件中需要引入数据库的配置,消费者是不需要连接数据库的,真正干活的是提供者

我们唯一能提取出来的是

  • 统一返回结果类以及一些通用的依赖

开始重构

注意事项

lombok引入问题

lombok依赖只能在当前工程中使用,(具体原因我也不知道),假如你在a工程的pom文件引入如下依赖

  1. <dependency>
  2. <groupId>org.projectlombok</groupId>
  3. <artifactId>lombok</artifactId>
  4. <scope>provided</scope>
  5. </dependency>

  你将a工程打包,提交到本地maven仓库中,然后你在b工程中想使用lombok你直接就引入a项目的依赖,最后的结果lombok是不能使用,跟没有引进lombok一样,你需要在b工程中也引入lombok依赖,才可以使用

关于spring-boot-maven-plugin编译警告

需要在父工程的pom文件中指定其版本号

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <version>2.3.0.RELEASE</version>
      <configuration>
        <fork>true</fork>
        <addResources>true</addResources>
      </configuration>
    </plugin>
  </plugins>
</build>

创建cloud-api-commons工程

这步想必大家都会了

注意创建的是一个maven工程即可,不需要添加启动类

该工程中存放统一返回结果和通用的依赖

改pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud2020</artifactId>
        <groupId>com.sgy.cloud2020</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-api-commons</artifactId>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.3.5</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional> <!-- 表示依赖不会传递 -->
        </dependency>
    </dependencies>

</project>

目录结构

1610803428028.png

maven clean&install

将改工程进行clean和install,提交到本地maven仓库,以便其他的工程可以同意pom的形式进行引入

创建cloud-provider工程

  该工程主要存放一些,提供者需要的工具类,以及提供者通用的pom依赖,比如tk.mapper和数据库连接相关的

该pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud2020</artifactId>
        <groupId>com.sgy.cloud2020</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-provider-payment8090</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.sgy.cloud2020</groupId>
            <artifactId>cloud-provider</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
        </dependency>

    </dependencies>
</project>

目录结构

1610803428063.png

maven clean&install

将改工程进行clean和install,提交到本地maven仓库,以便其他的工程可以同意pom的形式进行引入

创建cloud-consumer工程

该工程用于存放消费者使用的工具类,和消费者使用通用pom依赖

改pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud2020</artifactId>
        <groupId>com.sgy.cloud2020</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-consumer</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.sgy.cloud2020</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>

maven clean&install

将改工程进行clean和install,提交到本地maven仓库,以便其他的工程可以同意pom的形式进行引入

修改cloud-provider-payment8090和cloud-consumer-order80

修改pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud2020</artifactId>
        <groupId>com.sgy.cloud2020</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-provider-payment8090</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.sgy.cloud2020</groupId>
            <artifactId>cloud-provider</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>


    </dependencies>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud2020</artifactId>
        <groupId>com.sgy.cloud2020</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-consumer-order80</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.sgy.cloud2020</groupId>
            <artifactId>cloud-consumer</artifactId>
            <version>${project.version}</version>
        </dependency>


        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>