Skip to content

新建业务

现有服务

  • acuity-system-server

    主要给开发运营系统提供接口,可以理解为操作系统级全局数据。如资源维护、租户维护、应用维护、字典维护等。

  • acuity-oauth-server

    主要是登录、认证、常用的数据接口等功能。

  • acuity-base-server

    主要给基础平台提供接口,可以理解为操作租户级基础数据。如授权、基础数据、消息中心、用户中心等。

  • acuity-gateway-server

    网关路由、URI权限控制、用户身份解析等。

可以看出,目前本项目已有的服务基本上都是基础功能(权限、组织、字典、文件、消息等),即每个业务系统最常用的功能。 有了这些基础功能,后面开发任何业务系统时,就可以在这套框架的基础上开发具体的业务。而业务的拆分则需要根据具体的业务场景来决定,故我们这里不讨论如何拆分,只讨论如何新建一个服务。

acuity-cloud 项目新建服务

创建一个新服务的步骤

  1. 新建服务
  2. 新建5个模块(api层、entity层、biz层、controller层、server层)
  3. 在5个模块中分别加入pom依赖
  4. 添加启动模块的启动类和一些启动配置
  5. 创建表并生成代码
  6. 启动服务
  7. 直接访问服务的swagger调用接口
  8. 通过网关访问swagger调用接口

这里讲解如何通过代码生成器新建acuity-test-server。新建后的结构应该如下:

├─acuity-cloud
│  ├─acuity-base-------------------------已有的权限服务
│  ├─acuity-test------------------------------新建的测试服务
│  ├───acuity-test-api------------------------测试服务API层
│  ├───acuity-test-biz------------------------测试服务业务层
│  ├───acuity-test-controller----------------测试服务控制层
│  ├───acuity-test-entity---------------------测试服务实体层
│  ├───acuity-test-server--------------------测试服务启动层
├─acuity-cloud
│  ├─acuity-base-------------------------已有的权限服务
│  ├─acuity-test------------------------------新建的测试服务
│  ├───acuity-test-api------------------------测试服务API层
│  ├───acuity-test-biz------------------------测试服务业务层
│  ├───acuity-test-controller----------------测试服务控制层
│  ├───acuity-test-entity---------------------测试服务实体层
│  ├───acuity-test-server--------------------测试服务启动层

调整代码生成器的配置

  1. 参考src/test/java/cloud/TestInitProject 适当修改配置后运行main方法. 按照如下的配置可以生成 test服务

    java
    public static void main(String[] args) {
     CodeGeneratorConfig config = new CodeGeneratorConfig();
     // 修改为 acuity-cloud 项目的绝对路径
     String path = "/Users/acuity/github/acuity-cloud";
     config
             // acuity-cloud 项目的 绝对路径! 路径只能到acuity-cloud
             .setProjectRootPath(path)
             // acuity-cloud 项目的前缀 若你的项目修改成了其他,则需要通过这里改前缀
             // 如:你要做OA系统,可以改为 oa
             // 但改为oa前,需要事先自行修改整个项目的所有模块都为oa !
             .setProjectPrefix("acuity")
    
             // 需要新建的 服务名      该例会生成 acuity-test 服务
             .setServiceName("test")
    
             // 首次新建服务时,设置为空字符串
             // 然后想新建子模块时,可以设置成子模块名  如:msg 服务下的 sms 模块即 视为子模块
             .setChildModuleName("")
    
             // 子模块是否需要生成entity模块  (设置为false不会生成 acuity-test-entity)
             .setIsGenEntity(true)
             // 是否acuity-boot项目  (生成acuity-cloud的代码,一定要设置为false)
             .setIsBoot(false)
    
             // 生成代码的作者
             .setAuthor("acuity")
             // 项目描述
             .setDescription("这是我生成的第一个服务")
             // 项目的版本, 一定要跟 acuity-cloud 下的其他服务版本一致, 否则会出错哦!
             .setVersion("3.0.0-SNAPSHOT")
             // 服务的端口号
             .setServerPort("12080")
             // 项目的 groupId
             .setGroupId("top.acuity.box")
     ;
     // 项目的业务代码 存放的包路径
     config.setPackageBase("top.acuity.box." + config.getChildModuleName());
    
     System.out.println("项目初始化根路径:" + config.getProjectRootPath());
     ProjectGenerator pg = new ProjectGenerator(config);
     pg.build();
    }
    public static void main(String[] args) {
     CodeGeneratorConfig config = new CodeGeneratorConfig();
     // 修改为 acuity-cloud 项目的绝对路径
     String path = "/Users/acuity/github/acuity-cloud";
     config
             // acuity-cloud 项目的 绝对路径! 路径只能到acuity-cloud
             .setProjectRootPath(path)
             // acuity-cloud 项目的前缀 若你的项目修改成了其他,则需要通过这里改前缀
             // 如:你要做OA系统,可以改为 oa
             // 但改为oa前,需要事先自行修改整个项目的所有模块都为oa !
             .setProjectPrefix("acuity")
    
             // 需要新建的 服务名      该例会生成 acuity-test 服务
             .setServiceName("test")
    
             // 首次新建服务时,设置为空字符串
             // 然后想新建子模块时,可以设置成子模块名  如:msg 服务下的 sms 模块即 视为子模块
             .setChildModuleName("")
    
             // 子模块是否需要生成entity模块  (设置为false不会生成 acuity-test-entity)
             .setIsGenEntity(true)
             // 是否acuity-boot项目  (生成acuity-cloud的代码,一定要设置为false)
             .setIsBoot(false)
    
             // 生成代码的作者
             .setAuthor("acuity")
             // 项目描述
             .setDescription("这是我生成的第一个服务")
             // 项目的版本, 一定要跟 acuity-cloud 下的其他服务版本一致, 否则会出错哦!
             .setVersion("3.0.0-SNAPSHOT")
             // 服务的端口号
             .setServerPort("12080")
             // 项目的 groupId
             .setGroupId("top.acuity.box")
     ;
     // 项目的业务代码 存放的包路径
     config.setPackageBase("top.acuity.box." + config.getChildModuleName());
    
     System.out.println("项目初始化根路径:" + config.getProjectRootPath());
     ProjectGenerator pg = new ProjectGenerator(config);
     pg.build();
    }
  2. 如果还想像消息服务一样生成短信模块, 可以将上面的配置适当修改, 即可生成man模块:

    java
    // 首次新建服务时,设置为空字符串
    // 然后想新建子模块时,可以设置成子模块名  如:msg 服务下的 sms 模块即 视为子模块
    .setChildModuleName("man")
    // 子模块是否需要生成entity模块 ,这是设置成true 会生成 man-entity, 设置成false, 则不会生成, 跟test模块共用 test-entity模块即可
    .setIsGenEntity(false)
    // 首次新建服务时,设置为空字符串
    // 然后想新建子模块时,可以设置成子模块名  如:msg 服务下的 sms 模块即 视为子模块
    .setChildModuleName("man")
    // 子模块是否需要生成entity模块 ,这是设置成true 会生成 man-entity, 设置成false, 则不会生成, 跟test模块共用 test-entity模块即可
    .setIsGenEntity(false)
  3. 结构生成:

  4. 然后在acuity-cloud/pom.xml 里面加入下面的代码

    xml
    <module>acuity-test</module>
    <module>acuity-test</module>
  5. acuity-test/pom.xml里面加入下面的代码

    xml
    <module>acuity-man-controller</module>
    <module>acuity-man-entity</module>
    <module>acuity-man-biz</module>
    <module>acuity-man-controller</module>
    <module>acuity-man-entity</module>
    <module>acuity-man-biz</module>
  6. acuity-test-server/pom.xml里面加入下面的代码

    xml
    <dependency>
     <groupId>com.acuity.acuity</groupId>
     <artifactId>acuity-man-controller</artifactId>
     <version>${acuity-project.version}</version>
    </dependency>
    <dependency>
     <groupId>com.acuity.acuity</groupId>
     <artifactId>acuity-man-controller</artifactId>
     <version>${acuity-project.version}</version>
    </dependency>
  7. 通过idea Maven 打包整个acuity-cloud 项目,并点一下Maven的 Reload All Maven Projects

    mvn clean package
    mvn clean package
  8. 打包成功后, 在nacos中新建一个名为: acuity-test-server.yml 的配置文件,并将: acuity-test-server/src/main/resources/acuity-test-server.yml 配置文件的内容复制进去

    yaml
    acuity:
      swagger:
        docket:
          test:
            title: test服务服务
            base-package: top.acuity.box.test.controller
    
    server:
      port: 18770
    acuity:
      swagger:
        docket:
          test:
            title: test服务服务
            base-package: top.acuity.box.test.controller
    
    server:
      port: 18770
  9. 将下面的配置手动加入nacos中 acuity-gateway-server.yml (参考配置文件中其他的类似配置, 不要配错位置了)

    yaml
    spring:
    cloud:
     gateway:
       routes:
         - id: test
           uri: lb://acuity-test-server
           predicates:
             - Path=/test/**
           filters:
             - StripPrefix=1
    spring:
    cloud:
     gateway:
       routes:
         - id: test
           uri: lb://acuity-test-server
           predicates:
             - Path=/test/**
           filters:
             - StripPrefix=1
  10. 启动新建的test服务

acuity-boot 项目新建模块

因为acuity-boot 是单体项目,但有同时保持了和acuity-cloud一致的结构, 所以二次开发时, 仅需新增模块即可, 新增模块时, 可以直接在 acuity-authority 下面新建, 也可以参考msg模块, 独立新建一个模块

调整代码生成器的配置

  1. 参考src/test/java/boot/TestInitProject 适当修改配置后运行main方法. 按照如下的配置可以生成 mall模块和man模块

    java
    public static void main(String[] args) {
         CodeGeneratorConfig config = new CodeGeneratorConfig();
         String path = "/Users/acuity/github/acuity-boot";
         config
                 // acuity-cloud 项目的 绝对路径!
                 .setProjectRootPath(path)
                 // 项目的前缀
                 .setProjectPrefix("acuity-")
    
                 // 需要新建的 服务名      该例会生成 acuity-mall 模块
                 .setServiceName("mall")
    
                 // 子模块的设置请参考 消息服务 (msg 模块下的 sms 模块即 视为子模块)
                 .setChildModuleName("mall")
    
                 .setIsGenEntity(true)
                 .setIsBoot(true)
    
                 // 生成代码的注释 @author acuity
                 .setAuthor("acuity")
                 // 项目描述
                 .setDescription("商城")
                 // 项目的版本, 一定要跟 acuity-admin-cloud 下的其他服务版本一致, 否则会出错哦
                 .setVersion("3.0.0-SNAPSHOT")
                 // 服务的端口号
                 .setServerPort("12080")
                 // 项目的 groupId
                 .setGroupId("com.acuity.acuity")
         ;
         // 项目的业务代码 存放的包路径
         config.setPackageBase("com.acuity.acuity." + config.getChildModuleName());
    
         System.out.println("项目初始化根路径:" + config.getProjectRootPath());
         ProjectGenerator pg = new ProjectGenerator(config);
         pg.build();
     }
    public static void main(String[] args) {
         CodeGeneratorConfig config = new CodeGeneratorConfig();
         String path = "/Users/acuity/github/acuity-boot";
         config
                 // acuity-cloud 项目的 绝对路径!
                 .setProjectRootPath(path)
                 // 项目的前缀
                 .setProjectPrefix("acuity-")
    
                 // 需要新建的 服务名      该例会生成 acuity-mall 模块
                 .setServiceName("mall")
    
                 // 子模块的设置请参考 消息服务 (msg 模块下的 sms 模块即 视为子模块)
                 .setChildModuleName("mall")
    
                 .setIsGenEntity(true)
                 .setIsBoot(true)
    
                 // 生成代码的注释 @author acuity
                 .setAuthor("acuity")
                 // 项目描述
                 .setDescription("商城")
                 // 项目的版本, 一定要跟 acuity-admin-cloud 下的其他服务版本一致, 否则会出错哦
                 .setVersion("3.0.0-SNAPSHOT")
                 // 服务的端口号
                 .setServerPort("12080")
                 // 项目的 groupId
                 .setGroupId("com.acuity.acuity")
         ;
         // 项目的业务代码 存放的包路径
         config.setPackageBase("com.acuity.acuity." + config.getChildModuleName());
    
         System.out.println("项目初始化根路径:" + config.getProjectRootPath());
         ProjectGenerator pg = new ProjectGenerator(config);
         pg.build();
     }
  2. 如果还想像消息服务一样生成短信模块, 可以将上面的配置适当修改, 即可生成man模块:

    java
    // 子模块的设置请参考 消息服务 (msg 模块下的 sms 模块即 视为子模块)
    .setChildModuleName("man")
    // 设置是否生成acuity-man-entity模块
    .setIsGenEntity(false)
    // 子模块的设置请参考 消息服务 (msg 模块下的 sms 模块即 视为子模块)
    .setChildModuleName("man")
    // 设置是否生成acuity-man-entity模块
    .setIsGenEntity(false)
  3. 结构生成后截图如图:

  4. 然后在acuity-boot/pom.xml 里面加入下面的代码, 点一下Maven的reimport

    xml
    <module>acuity-mall</module>
    <module>acuity-mall</module>
  5. acuity-boot/acuity-mall/pom.xml里面加入下面的代码, 点一下Maven的reimport

    xml
    <module>acuity-mall-controller</module>
    <module>acuity-mall-entity</module>
    <module>acuity-mall-biz</module>
    <module>acuity-man-controller</module>
    <module>acuity-man-biz</module>
    <module>acuity-mall-controller</module>
    <module>acuity-mall-entity</module>
    <module>acuity-mall-biz</module>
    <module>acuity-man-controller</module>
    <module>acuity-man-biz</module>
  6. acuity-boot/acuity-authority/acuity-authority-server/pom.xml里面加入下面的代码, 点一下Maven的reimport

    xml
    <dependency>
     <groupId>com.acuity.acuity</groupId>
     <artifactId>acuity-man-controller</artifactId>
     <version>${acuity-project.version}</version>
    </dependency>
    <dependency>
     <groupId>com.acuity.acuity</groupId>
     <artifactId>acuity-mall-controller</artifactId>
     <version>${acuity-project.version}</version>
    </dependency>
    <dependency>
     <groupId>com.acuity.acuity</groupId>
     <artifactId>acuity-man-controller</artifactId>
     <version>${acuity-project.version}</version>
    </dependency>
    <dependency>
     <groupId>com.acuity.acuity</groupId>
     <artifactId>acuity-mall-controller</artifactId>
     <version>${acuity-project.version}</version>
    </dependency>
  7. acuity-boot/acuity-authority/acuity-authority-server/src/main/resources/application.yml 里面加入新建服务的swagger配置

    yaml
    acuity: 
     mall:
       title: 新增的商城服务
       base-package: com.acuity.acuity.mall.controller;com.acuity.acuity.man.controller
    acuity: 
     mall:
       title: 新增的商城服务
       base-package: com.acuity.acuity.mall.controller;com.acuity.acuity.man.controller
  8. 通过idea Maven 打包整个acuity-boot 项目

    mvn clean package
    mvn clean package
  9. acuity-web/vue.config.js中增加配置:

     ['^/api/mall']: '/',
     ['^/api/mall']: '/',
  10. 启动项目

注意事项

  1. 生成结构后,还需要调整一下pom依赖, 依赖关系为: server -> controller -> biz -> entity, api -> entity
  2. 生成结构后,需要调整项目pom,然后点击Maven插件reimport , 使得idea 识别正确, 然后执行Maven 的编译命令
  3. 必要时,重启idea.

欢迎使用天源云Saas快速开发系统