Appearance
新建业务
现有服务
acuity-system-server
主要给开发运营系统提供接口,可以理解为操作系统级全局数据。如资源维护、租户维护、应用维护、字典维护等。
acuity-oauth-server
主要是登录、认证、常用的数据接口等功能。
acuity-base-server
主要给基础平台提供接口,可以理解为操作租户级基础数据。如授权、基础数据、消息中心、用户中心等。
acuity-gateway-server
网关路由、URI权限控制、用户身份解析等。
可以看出,目前本项目已有的服务基本上都是基础功能(权限、组织、字典、文件、消息等),即每个业务系统最常用的功能。 有了这些基础功能,后面开发任何业务系统时,就可以在这套框架的基础上开发具体的业务。而业务的拆分则需要根据具体的业务场景来决定,故我们这里不讨论如何拆分,只讨论如何新建一个服务。
acuity-cloud 项目新建服务
创建一个新服务的步骤
- 新建服务
- 新建5个模块(api层、entity层、biz层、controller层、server层)
- 在5个模块中分别加入pom依赖
- 添加启动模块的启动类和一些启动配置
- 创建表并生成代码
- 启动服务
- 直接访问服务的swagger调用接口
- 通过网关访问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--------------------测试服务启动层
调整代码生成器的配置
参考
src/test/java/cloud/TestInitProject
适当修改配置后运行main方法. 按照如下的配置可以生成 test服务javapublic 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(); }
如果还想像消息服务一样生成短信模块, 可以将上面的配置适当修改, 即可生成
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)
结构生成:
然后在
acuity-cloud/pom.xml
里面加入下面的代码xml<module>acuity-test</module>
<module>acuity-test</module>
在
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>
在
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>
通过idea Maven 打包整个acuity-cloud 项目,并点一下Maven的 Reload All Maven Projects
mvn clean package
mvn clean package
打包成功后, 在nacos中新建一个名为: acuity-test-server.yml 的配置文件,并将: acuity-test-server/src/main/resources/acuity-test-server.yml 配置文件的内容复制进去
yamlacuity: 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
将下面的配置手动加入nacos中 acuity-gateway-server.yml (参考配置文件中其他的类似配置, 不要配错位置了)
yamlspring: 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
启动新建的test服务
acuity-boot 项目新建模块
因为acuity-boot 是单体项目,但有同时保持了和acuity-cloud一致的结构, 所以二次开发时, 仅需新增模块即可, 新增模块时, 可以直接在 acuity-authority 下面新建, 也可以参考msg模块, 独立新建一个模块
调整代码生成器的配置
参考
src/test/java/boot/TestInitProject
适当修改配置后运行main方法. 按照如下的配置可以生成 mall模块和man模块javapublic 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(); }
如果还想像消息服务一样生成短信模块, 可以将上面的配置适当修改, 即可生成
man模块
:java// 子模块的设置请参考 消息服务 (msg 模块下的 sms 模块即 视为子模块) .setChildModuleName("man") // 设置是否生成acuity-man-entity模块 .setIsGenEntity(false)
// 子模块的设置请参考 消息服务 (msg 模块下的 sms 模块即 视为子模块) .setChildModuleName("man") // 设置是否生成acuity-man-entity模块 .setIsGenEntity(false)
结构生成后截图如图:
然后在
acuity-boot/pom.xml
里面加入下面的代码, 点一下Maven的reimportxml<module>acuity-mall</module>
<module>acuity-mall</module>
在
acuity-boot/acuity-mall/pom.xml
里面加入下面的代码, 点一下Maven的reimportxml<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>
在
acuity-boot/acuity-authority/acuity-authority-server/pom.xml
里面加入下面的代码, 点一下Maven的reimportxml<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>
在
acuity-boot/acuity-authority/acuity-authority-server/src/main/resources/application.yml
里面加入新建服务的swagger配置yamlacuity: 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
通过idea Maven 打包整个acuity-boot 项目
mvn clean package
mvn clean package
在
acuity-web/vue.config.js
中增加配置:['^/api/mall']: '/',
['^/api/mall']: '/',
启动项目
注意事项
- 生成结构后,还需要调整一下pom依赖, 依赖关系为: server -> controller -> biz -> entity, api -> entity
- 生成结构后,需要调整项目pom,然后点击Maven插件reimport , 使得idea 识别正确, 然后执行Maven 的编译命令
- 必要时,重启idea.