COLA架构初始化DDD项目

news/2024/9/23 15:22:59
  • 使用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 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":因为是全局设置,无法按领域划分

参考文章

  • Spring Boot 升级 3.2 报错 Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/46762.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

试用了下WPS定制版,真香!

告别广告和弹窗!告别广告和弹窗! 前言 现在办公/日常使用基本上都是离不开 office 三件套的了。我个人也曾购买过微软的 office 三件套,WPS 会员版: ​ ‍ ‍ ​ ‍ ‍ 随着消费降级, 使用一段时间后,我发现我根本用不上什么高级的功能,感觉不划算,几百块钱下馆子不香吗…

HarmonyOS应用开发——Hello World

下载 HUAWEI DevEco Studio: https://developer.harmonyos.com/cn/develop/deveco-studio/#download同意,进入配置页面:配置下载源以及本地存放路径,包括nodejs和ohpm:配置鸿蒙SDK路径:接受协议:确认无误后,点击下一步,开始自动下载有关环境以及依赖:全部下载完成,点击…

发文指南 | 生信植物科学类期刊近五年影响因子分享

前几天(2024.6.20)科睿唯安发布了《期刊引证报告》,公开2023年期刊最新影响因子。本号对植物科学领域和农林科学领域期刊做了及时分享:重磅出炉!2024植物科学领域&农林科学领域期刊影响因子 参与本号运营的小伙伴们基本都是生物信息、植物科学类的背景,因此我们对这类…

Grab 基于 Apache Hudi 实现近乎实时的数据分析

介绍 在数据处理领域,数据分析师在数据湖上运行其即席查询。数据湖充当分析和生产环境之间的接口,可防止下游查询影响上游数据引入管道。为了确保数据湖中的数据处理效率,选择合适的存储格式至关重要。 Vanilla数据湖解决方案构建在具有 Hive 元存储的云对象存储之上,其中数…

aspera下载nr数据库

ascp -QT -i ~/.aspera/connect/etc/asperaweb_id_dsa.openssh -l 1000M -k 1 -T anonftp@ftp.ncbi.nlm.nih.gov:/blast/db/nr.00.tar.gz ./

【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50

一、介绍 昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集(蜜蜂, 甲虫, 蝴蝶, 蝉, 蜻蜓, 蚱蜢, 蛾, 蝎子, 蜗牛, 蜘蛛)进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django…

BookKeeper 介绍(3)--API

本文主要介绍 BookKeeper 的 API,文中所使用到的软件版本:Java 1.8.0_341、BookKeeper 4.16.5。1、引入依赖<dependency><groupId>org.apache.bookkeeper</groupId><artifactId>bookkeeper-server</artifactId><version>4.16.5</vers…

Phi-3 模型手机部署教程(微软发布的可与GPT-3.5媲美的小模型)

Phi 是微软AI研究院新推出的开源小型语言模型,适用于商业使用,其优势在于体积小、资源需求少,被称为“一个能跑在手机上的大模型”,我们通过Termux和Ollama工具,在我们手机上部署和体验……前面几篇博文,老牛同学和大家一起在个人电脑部署了Qwen2、GLM4、Llama3、ChatTTS…