【SpringCloud】14. Spring Cloud企业级工程搭建

929 阅读3分钟

项目架构

20210310205648.png

  • 父工程:全局管理所有引入依赖的版本号。
    • 父工程中配置版本号后,继承父工程的所有模块不需要再引入版本号。
  • 公共模块:全局管理公共实体类,公共工具类,公共依赖。
    • 公共模块中配置实体类,工具类后,依赖公共模块的所有模块可以直接导包使用。
    • 公共模块中配置依赖,依赖公共模块的所有模块不需要再另外导入依赖。
  • 服务:管理自己特有的依赖,实现相应的业务。

注意:

  1. 因为网关服务中不能引入web依赖,而其他服务可能都需要引入web依赖。所以web依赖一般还是放在公共模块中,但是网关服务就不会依赖公共模块,只继承父工程。

构建步骤

1. 构建工程文件夹

  1. 本地文件目录下创建工程文件夹

    image.png

  2. IDEA中选择 File --> Open 打开工程文件夹

2. 构建父工程

  1. 右击工程文件夹:New --> Module --> Maven --> Next(不需要选择archetype

    20210314201926.png

  2. 配置模块参数

    image.png

  3. 删除父工程中src目录

  4. 父工程的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">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.aydenbryan</groupId>
        <artifactId>covid-19-data-platform-parent</artifactId>
        <packaging>pom</packaging>
        <version>1.0-SNAPSHOT</version>
        <!-- 继承父工程的所有模块,会自动添加 -->
        <modules>
            <module>covid-19-data-platform-common</module>
            <module>covid-19-data-platform-reptile</module>
        </modules>
    
        <!-- 继承Spring Boot父项目 -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.5.RELEASE</version>
        </parent>
    
        <!-- 引入组件的版本号 -->
        <properties>
            <!-- 公共模块的版本号 -->
            <common.version>1.0-SNAPSHOT</common.version>
            <java.version>1.8</java.version>
            <spring.cloud.version>Hoxton.SR6</spring.cloud.version>
        </properties>
    
        <!-- 引入组件的声明 -->
        <dependencyManagement>
            <dependencies>
                <!-- 公共模块声明 -->
                <dependency>
                    <groupId>org.aydenbryan</groupId>
                    <artifactId>covid-19-data-platform-common</artifactId>
                    <version>${common.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring.cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    </project>
    

    注意:

    1. dependencies和dependencyManagement区别在于:
      • 如果父工程使用dependencies来配置依赖的话,即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承所有依赖项。
      • 如果父工程使用dependencyManagement来配置依赖的话,起到了声明依赖的作用,并不实现引入。因此子项目需要单独配置需要使用到的依赖。

3. 构建公共模块

  1. 右击工程文件夹:New --> Module --> Maven --> maven-archetype-quickstart --> Next

    20210314173058.png

  2. 配置模块参数

    image.png

    注意:需要将公共模块继承父工程。

  3. 配置Maven路径

    image.png

  4. 公共模块的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>
         <groupId>org.aydenbryan</groupId>
         <artifactId>covid-19-data-platform-parent</artifactId>
         <version>1.0-SNAPSHOT</version>
       </parent>
       <modelVersion>4.0.0</modelVersion>
     
       <artifactId>covid-19-data-platform-common</artifactId>
     
       <name>covid-19-data-platform-common</name>
       <!-- FIXME change it to the project's website -->
       <url>http://www.example.com</url>
     
       <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <!-- Maven自动重置JDK版本默认设置为1.8 -->
         <maven.compiler.source>1.8</maven.compiler.source>
         <maven.compiler.target>1.8</maven.compiler.target>
       </properties>
     
       <!-- 配置公共依赖 -->
       <dependencies>
         
       </dependencies>
     </project>
    
  5. 删除公共模块中test 目录和APP

  6. 添加entityutil

注意:

  1. 如果创建完模块之后,该模块的pom.xml为灰色且被横线划掉,解决方案为:取消选中即可

    image.png

  2. 构建服务模块选archetype时,建议选择maven-archetype-quickstart。选择maven-archetype-webapp也可以,但是现在项目大部分都是前后端分离项目,后端服务不应该包含前端页面,所以选maven-archetype-webapp没有什么意义。

4. 构建服务模块

  1. 创建服务模块的方式和创建公共模块的方式相同(见上方)

  2. 服务模块的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>
        <groupId>org.aydenbryan</groupId>
        <artifactId>covid-19-data-platform-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
      </parent>
      <modelVersion>4.0.0</modelVersion>
    
      <artifactId>covid-19-data-platform-reptile</artifactId>
    
      <name>covid-19-data-platform-reptile</name>
      <!-- FIXME change it to the project's website -->
      <url>http://www.example.com</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
      </properties>
    
      <!-- 配置服务独有的依赖 -->
      <dependencies>
        <!-- 每个服务必须依赖公共模块 -->
        <dependency>
          <groupId>org.aydenbryan</groupId>
          <artifactId>covid-19-data-platform-common</artifactId>
        </dependency>
      </dependencies>
    </project>
    
  3. 删除APP类和APPTest

  4. 创建服务模块入口类

    @SpringBootApplication
    public class ReptileAppication {
    
        public static void main(String[] args) {
            SpringApplication.run(ReptlieApplication.class, args);
        }
    
    }
    
  5. 创建resources目录,并将其设置为Resources Root

  6. resources目录中创建application.yml

  7. 配置application.yml

    server:
      port: 9000
    
    spring:
      application:
        name: reptile
    

注意:

  1. 每一个构建的服务模块都是没有Spring Boot的启动类的,所以我们需要自己写。
  2. 当运行两个或者两个以上模块的时候,IDEA就会自动调出Service Dashboard界面。