# 项目开发流程

# 一、概述

  1. 需求分析

  2. 数据库设计,概要设计

  3. 详细设计

  4. 编码

    • 环境搭建
      • 库表入库,中间件等等配置
      • 微服务项目搭建,模块拆分等
      • docker部署文档等
    • 编码,工具类等
  5. 部署测试环境

  6. 准备部署文档

  7. 部署生产环境

# 二、微服务项目开发流程

# 1.技术选型

  • springboot+springcloud+springcloudalibaba
  • mysql+nacos+redis

# 2.开发流程

  1. 创建父项目 cloud-ufs

    主要设置springboot springcloud springcloudalibaba版本和依赖

        <properties>        
    		<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
            <springboot.version>2.3.2.RELEASE</springboot.version>
            <springcloudalibaba.version>2.2.5.RELEASE</springcloudalibaba.version>
        </properties>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>${springboot.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                    <version>${springcloudalibaba.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
  2. 创建子项目,很多个

    1. 必要依赖web discovery-client
    2. 启动类相关注解等 @EnableDiscoveryClient
    3. 配置 application.properties 端口 应用名 nacos地址
    4. 写个测试的Controller
    <dependencies>
    		<dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--服务注册 发现-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
    </dependencies>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
  3. 网关 gateway服务

    配置文件 application.yml

    <dependencies>
    		<dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-gateway</artifactId>
            </dependency>
            <!--服务注册 发现-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
    </dependencies>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    server.port: 8888
    spring.application.name: GATEWAY
    spring.cloud.nacos.server-addr: 127.0.0.1:8848
    spring.cloud.gateway.routes:
      - id: provider_route  # 服务一,服务提供者一
        uri: lb://PROVIDER
        predicates:
          - Path=/provider/demo
        filters:
          - StripPrefix=1 # 向后端service路由时,去掉网关添加的provider
          
      - id: consumer_route # 服务二,服务消费者一
        uri: lb://CONSUMER
        predicates:
          - Path=/consumer/demo
        filters:
          - StripPrefix=1 # 向后端service路由时,去掉网关添加的consumer
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
  4. 测试访问是否通着

    • 访问网关 http://localhost:8888/provider/demo -> 路由到 http://localhost:8081/demo 服务提供者
    • 访问网关 http://localhost:8888/consumer/demo -> 路由到 http://localhost:8082/demo 服务消费者
  5. 接下来开始写业务代码等

    • 导包 mysql mybatis druid等
    • 配置文件 数据源 mybatis配置 日志配置
    • 增删改查 自动生成代码等 事务等
    • 其他各种业务代码....
  6. 各模块互相调用

    • 导入openfeign依赖

      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-openfeign</artifactId>
      </dependency>
      
      1
      2
      3
      4
    • 启动类注解 @EnableFeignClients

    • feign包下新增服务提供者接口

      @FeignClient("PROVIDER")
      public interface ProviderClients {
          //接口声明
          @GetMapping("/provider/list")
          public List<Object> list();
      }
      
      1
      2
      3
      4
      5
      6
  7. 抽取公共部分到common里

    • 公共依赖 web、openfeign、nacos-discover等、数据源等
    • 公共代码,pojo类等
    • 统一配置管理等 比如使用Nacos配置中心
  8. 使用Nacos统一配置中心,比如各子模块的application配置,网关等

    • nacos新增配置

      1. namespace 存放微服务项目配置信息 一般一个项目一个命名空间

      2. 新增配置

      • data-id provider-dev.properties # 一般是应用名-环境.properties

      • Group PROVIDER # 可以是微服务的名字

    • 引入依赖

      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
      </dependency>
      
      1
      2
      3
      4
    • 新建 bootstrap.properties配置文件

      spring.cloud.nacos.server-addr=127.0.0.1:8848 
      spring.cloud.nacos.config.namespace=uuid
      spring.cloud.nacos.config.group=PROVIDER
      spring.cloud.nacos.config.name=provider-dev.properties
      spring.cloud.nacos.config.file-extension=properties
      
      1
      2
      3
      4
      5
  9. 通过网关调用测试

  10. 部署

    • 打包 一般跳过测试

      • 必须要有插件

        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
        
        1
        2
        3
        4
        5
        6
        7
        8
      • 命令 mvn clean package -Dskip.test=true

    • docker-compose方式。或者java -jar手动方式都行

# 三、SpringBoot项目开发前框架搭建

基础项目应该引入的相关工具依赖

  1. Swagger文档,或者Knife4j等
  2. 统一返回 Result 对象
  3. 通用分页对象 MybatisPlus自带的也行
  4. 常用工具类 fastjsonhutool
  5. 全局异常处理和自定义异常
  6. 错误枚举
  7. 多环境配置文件
  8. 日志配置
  9. 其他