- 使用COLA脚手架初始化项目
- 实战代码:https://gitee.com/XuXiaoCong/cola-springboot-demo
- COLA项目地址:https://github.com/alibaba/COLA
- BiliBili视频
创建项目
- 使用COLA脚手架(Maven)创建COLA项目
- DgroupId: 公司/组织名称
- DartifactId:项目名称
- Dversion:版本号
- Dpackage:包路径
# 先确认maven正确安装
mvn --version
# Shell(Linux)
mvn archetype:generate \
-DgroupId=com.xxc \
-DartifactId=cola-springboot-demo \
-Dversion=0.0.1 \
-Dpackage=com.xxc.demo \
-DarchetypeArtifactId=cola-framework-archetype-web \
-DarchetypeGroupId=com.alibaba.cola \
-DarchetypeVersion=5.0.0
# CMD(Windows)使用"^"当做换行符
mvn archetype:generate ^
-DgroupId=com.xxc ^
-DartifactId=cola-springboot-demo ^
-Dversion=0.0.1 ^
-Dpackage=com.xxc.demo ^
-DarchetypeArtifactId=cola-framework-archetype-web ^
-DarchetypeGroupId=com.alibaba.cola ^
-DarchetypeVersion=5.0.0
# PowerShell(Windows)使用"`"当做换行符,并且参数使用单引号包裹
mvn archetype:generate `
-DgroupId='com.xxc' `
-DartifactId='cola-springboot-demo' `
-Dversion='0.0.1' `
-Dpackage='com.xxc.demo' `
-DarchetypeArtifactId='cola-framework-archetype-web' `
-DarchetypeGroupId='com.alibaba.cola' `
-DarchetypeVersion='5.0.0'
清理生成代码
- 清理pom.xml文件(所有模块)
- 更新Java、SpringBoot依赖的版本
- java:17
- SpringBoot: 3.3.0/3.1.12
- 除了SpringBoot、Cola有关的依赖,其他全部删除
- 生成代码的依赖版本过于老旧,为了方便先全部删除,后面再自行添加需要的组件
- 更新Java、SpringBoot依赖的版本
- 清理代码
- 删除所有实例代码、单元测试,只保留基础目录
- java使用"package-info.java"占位
- 目录使用".gitkeep"文件占位
cola-springboot-demo
├─ .gitignore
├─ cola-springboot-demo-adapter
│ ├─ pom.xml
│ └─ src
│ └─ main
│ └─ java
│ └─ com
│ └─ xxc
│ └─ demo
│ └─ package-info.java
├─ cola-springboot-demo-app
│ ├─ pom.xml
│ └─ src
│ └─ main
│ └─ java
│ └─ com
│ └─ xxc
│ └─ demo
│ └─ package-info.java
├─ cola-springboot-demo-client
│ ├─ pom.xml
│ └─ src
│ └─ main
│ └─ java
│ └─ com
│ └─ xxc
│ └─ demo
│ └─ package-info.java
├─ cola-springboot-demo-domain
│ ├─ pom.xml
│ └─ src
│ └─ main
│ └─ java
│ └─ com
│ └─ xxc
│ └─ demo
│ └─ domain
│ └─ package-info.java
├─ cola-springboot-demo-infrastructure
│ ├─ pom.xml
│ └─ src
│ └─ main
│ ├─ java
│ │ └─ com
│ │ └─ xxc
│ │ └─ demo
│ │ ├─ config
│ │ │ └─ package-info.java
│ │ └─ package-info.java
│ └─ resources
│ ├─ logback-spring.xml
│ └─ mybatis
│ └─ .gitkeep
├─ pom.xml
└─ start
├─ pom.xml
└─ src
└─ main
├─ java
│ └─ com
│ └─ xxc
│ └─ demo
│ └─ Application.java
└─ resources
├─ application.properties
└─ logback-spring.xml
- 验证是否有遗漏
- 注意"ERROR"级别的错误,可能是没删完整,删除对应文件即可
mvn clean install
Maven依赖
版本管理
- 在根目录的pom.xml中,使用"dependencyManagement"节点进行版本管理
- 在使用的模块才真正引入依赖
Mybatis-plus
- 数据库操作
<properties>
<mybatis-plus-starter.version>3.5.6</mybatis-plus-starter.version>
<mysql-connector.version>8.3.0</mysql-connector.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus-starter.version}</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>${mysql-connector.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</dependencyManagement>
- 在SpringBoot3.2/3.3使用mybatis报错
- 报错信息:"Invalid value type for attribute 'factoryBeanObjectType': java.lang.String"
- 解决方法:https://developer.aliyun.com/article/1395691
- 如果怕麻烦,SpringBoot版本改为3.1.X
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<!-- 排除mybatis -->
<exclusions>
<exclusion>
<artifactId>mybatis-spring</artifactId>
<groupId>org.mybatis</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- 自定义mybatis版本 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.3</version>
</dependency>
MapStruct
- 用于对象的映射,主要在infrastructure的convertor使用
- 由于MapStruct的特殊性,需要修改plugin
<properties>
<mapstruct.version>1.5.5.Final</mapstruct.version>
<mapstruct.binding>0.2.0</mapstruct.binding>
<projectlombok.version>1.18.32</projectlombok.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<!-- MapStruct依赖 -->
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${projectlombok.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>${mapstruct.binding}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
Swagger
- 使用Swagger显示文档
- spring-boot-starter-validation是Spring
<properties>
<springdoc.version>2.5.0</springdoc.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>${springdoc.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
打包配置
- start层,pom.xml增加打包插件
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
- 配置后可打包jar文件,使用java命令运行
# 打包jar文件
mvn clean package
# 运行jar文件
java -jar start/target/start.jar
填充代码
- 代码下载地址:https://gitee.com/XuXiaoCong/cola-springboot-demo
- 代码中,大部分先使用领域分包,再使用功能分包
- 领域分包指,用户(User)、订单(Order)、Product(商品)等大方向区分
- 功能分包指,如下结构图中的"executor","consumer","scheduler"等功能
- 不使用领域分包的例外
- Adapter层:控制器包含多个接口,本身按领域区分了
- Infrastructure层中的"config":因为是全局设置,无法按领域划分