头图

创建项目

  • 使用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 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报错

  • 如果怕麻烦,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":因为是全局设置,无法按领域划分

参考文章


言午日尧耳总
1 声望5 粉丝

不秃顶、不猝死,顺顺利利活到100可以吗?


下一篇 »
COLA常用组件