Step 1 -> 初始化项目,配置远程git仓库
1. 创建远程git仓库
2. 创建本地Maven项目(父工程) & 创建本地git仓库
3. 检查Maven配置
4. 配置并推送到远程仓库
Step 2 -> 多模块化
父工程/父模块
删除父模块多余文件
保留pom.xml
用于依赖管理配置
pom.xml
properties
统一声明版本号、其他公共配置属性,例如:统一配置项目构建的源码的字符集格式DepencyManagement
统一声明依赖
相当于一个对所依赖jar包进行版本管理的管理器
只是声明依赖,并不实现引入dependencyManagement
和dependencies
使用
dependencyManagement
子项目需要显式的声明需要用的依赖
只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项
指定版本号时,会使用子项目中指定的jar版本。使用
dependencies
即使在子项目中不写该依赖项,子项目仍然会从父项目中继承该依赖项(全部继承)
在DepencyManagement中声明子模块的
<dependency>
,方便子模块间相互引用
<type>pom</type>
&<scope>import</scope>
1
2<type>pom</type>
<scope>import</scope>当一个父pom中的dependencyManagement标签中需要导入另一个pom中的dependencyManagement的时候
必须同时使用<scope>import</scope>
和<type>pom</type>
例
1
2
3
4
5
6
7
8
9
10
11<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>当需要把一些依赖定义到一个pom工程中,但是由于maven单继承机制,子工程又想通过依赖引入该pom工程中的所有依赖
只需要添加<type>pom</type>
type默认为jar,依赖jar工程时无需type标签
并且依赖jar,则会将jar工程中包含的大量依赖传递过来
子模块划分
模块划分无标准,下面是一些思路以及例子
按业务,技术拆分,按分层划分
拆分公共模块
拆分后的子模块应该具有独立的功能和职责,能够单独进行测试、构建和部署。
例1:
project-name-admin
项目的后台模块 提供后台服务controller
程序入口 - Application
程序配置 - properties.yml
project-name-common
项目的公共模块
实体类entity,工具类utils,常量constant,配置config,响应response,异常exception
枚举enums,注解annotation
project-name-system
项目的系统模块
用户管理,系统设置等
service,mapper
project-name-core
项目的核心业务,service,mapper
project-name-xxx
项目的其他模块
例2
DDD框架
- project-name
- project-name-main
- project-name-app
- project-name-client
- project-name-domain
- project-name-entry
- project-name-infra
- project-name-starter
- project-name-main
模块打包
在多模块项目中,通常还会有聚合模块和父模块。聚合模块用于将多个子模块组织在一起,方便进行统一的构建和测试;而父模块用于管理所有子模块的依赖关系、插件配置等信息。这两个模块都不需要打包成 jar 文件,它们只是用于组织并管理子模块的结构和配置信息。
聚合模块和父模块pom打包
对于一个多模块项目,只有子模块需要打包成 jar 文件并发布到 Maven 仓库中,而聚合模块和父模块则不需要打包成 jar 文件
子模块jar打包
Step 3 -> yml环境配置(数据库连接,mybatis等等),多环境
1.配置
1 | # 应用服务 WEB 访问端口 |
2.多环境
application-dev.yml
开发环境 - 一般打开全部错误报告application-test.yml
测试环境application-prod.yml
生产环境 - 正式提供对外服务,一般会关掉错误报告,打开错误日志
application.yml
激活某一环境
1 | spring: |
分层
各层对象定义一例
controller request入参,dto出参
service request入参,dto出参
dao param入参,do出参
注意事项
- 业务逻辑层Service和数据库DAO层的操作对象不要混用
- Controller层的数据对象不要直接渗透到DAO层(或者mapper层)
- 同理数据表实体对象Entity也不要直接传到Controller层进行输出或展示
导入依赖
Spring
- Spring Web
Spring核心依赖,相关注解支持
访问数据库
JDBC API
Java程序访问数据库的标准接口MySQL Driver
用于访问Mysql数据库的官方驱动MyBatis Framework
用于数据库连接/操作的持久层框架
工具
Lombok
注解生成get/set等Mapstruct
对象间的属性拷贝Mapstruct-processor
MapStruct的编译时注解处理器,它可以在编译时自动生成映射代码
中间件
- spring-boot-starter-amqp
基于AMQP协议的消息中间件框架,消息队列,RabbitMQ
补充
application.properties文件乱码
Spring多模块扫描
默认扫描启动类同级包和子包内容
多模块时,依赖的模块,同包合并扫描
Application位于com.hikaristar包下,tool-pack-admin依赖tool-pack-db
tool-pack-db的com.hikaristar包下被扫描
参考
SpringBoot多模块项目开发(Maven多模块项目)
Maven中<scope>import</scope> <type>pom</type>用法