- 使用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使用"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 installMaven依賴
版本管理
- 在根目錄的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":因為是全局設置,無法按領域劃分

參考文章
- Spring Boot 升級 3.2 報錯 Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String