- 使用COLA腳手架初始化項目
- 實(shí)戰(zhàn)代碼:https://gitee.com/XuXiaoCong/cola-springboot-demo
- COLA項目地址:https://github.com/alibaba/COLA
- BiliBili視頻
創(chuàng)建項目
- 使用COLA腳手架(Maven)創(chuàng)建COLA項目
- DgroupId: 公司/組織名稱
- DartifactId:項目名稱
- Dversion:版本號
- Dpackage:包路徑
# 先確認(rèn)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)使用"^"當(dāng)做換行符
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)使用"`"當(dāng)做換行符阔墩,并且參數(shù)使用單引號包裹
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有關(guān)的依賴,其他全部刪除
- 生成代碼的依賴版本過于老舊彩届,為了方便先全部刪除,后面再自行添加需要的組件
- 更新Java灌曙、SpringBoot依賴的版本
- 清理代碼
- 刪除所有實(shí)例代碼、單元測試霉翔,只保留基礎(chǔ)目錄
- 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
- 驗(yàn)證是否有遺漏
- 注意"ERROR"級別的錯誤,可能是沒刪完整苞笨,刪除對應(yīng)文件即可
mvn clean install
Maven依賴
版本管理
- 在根目錄的pom.xml中债朵,使用"dependencyManagement"節(jié)點(diǎn)進(jìn)行版本管理
- 在使用的模塊才真正引入依賴
Mybatis-plus
- 數(shù)據(jù)庫操作
<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命令運(yùn)行
# 打包jar文件
mvn clean package
# 運(yùn)行jar文件
java -jar start/target/start.jar
填充代碼
- 代碼下載地址:https://gitee.com/XuXiaoCong/cola-springboot-demo
- 代碼中谚中,大部分先使用領(lǐng)域分包,再使用功能分包
- 領(lǐng)域分包指寥枝,用戶(User)宪塔、訂單(Order)、Product(商品)等大方向區(qū)分
- 功能分包指脉顿,如下結(jié)構(gòu)圖中的"executor","consumer","scheduler"等功能
- 不使用領(lǐng)域分包的例外
- Adapter層:控制器包含多個接口蝌麸,本身按領(lǐng)域區(qū)分了
- Infrastructure層中的"config":因?yàn)槭侨衷O(shè)置,無法按領(lǐng)域劃分
image.png