1、写篇文章的目的是记录一下自己在spring boot多模块项目搭建与发布遇到的坑,也为读者提供借鉴的经验
2、springboot多模块就是将原来由一个spring boot项目开发管理的项目拆分成不同的模块,每一个模块都是一个maven项目,不同与原来的package;拆分的优点是有利解耦,有利于项目后期的扩展,缺点是把package拆分成不同的maven模块,增加了技术难度和维护成本;
3、项目结构介绍:
(1)模块介绍
整个项目分为四个模块,第一个模块是entity,用来存放pojo的模块;
第二个模块是common模块,这是一个用来存放公用的方法类的模块;
第三个模块是mapper模块,这个模块是mapper模块,用来操作数据库的模块;
第四个模块controller模块,存放service和controller接口的模块
(2)框架介绍:spring boot+mybatis-plus
(3)项目结构如图:
4、构建项目开始:
(1)新建一个springboot项目,作为父模块,名字是data-analysis-plat,这个模块的主要作用是连接其他模块,共享pom.xml里面的jar包,File->new->project->spring Initializr->...->finish
项目建好了之后,删掉不需要的部分结构,仅仅保留“.idea”、“pom.xml”、“*.iml”三个文件就够了,其他都可以删掉
(2)新建common、controller、entity、mapper四个模块,方法是点击建好的项目data-analysis-plat->new->Module->spring Initializr->...->finish,举例如下:
如法炮制,建立common、mapper、controller三个module;注意controller模块我这边需要的是war包,所以在选择包类型的时候,是war包,其他的步骤不变
(3)建立父模块与子模块之间的关联
第一步:在父模块data-analysis-plat的pom.xml中修改packging为pom模式、引入子模块,如下图:
第二步:在子模块中引入父模块,关键字parent,注意
第三步:建立子模块之间的依赖,entity和common是两个独立的模块,mapper模块依赖entity模块和common模块,controller模块依赖mapper,子模块与子模块之间的依赖使用dependency引入模块包就行,
(4)去除父模块pom和子模块中多余的部分
第一步:去掉父模块中的build部分,因为这里你不需要打包
第二步:把common、entity、mapper子模块中的启动类和pom中的build部分都删掉,这些模块都不需要打成可执行的jar包
(5)父项目进行compile和install监测,注意这一步一定要做,不要你在后面单独打包子模块的时候会抛出错误,原因模块之间的依赖包找不到,比如mapper依赖entity模块;父模块install时,会提前帮你把模块之间的依赖包下载好;例如:
这个错误时之前攒下的,项目结构差不多
在父maven项目中执行了compile和install没有问题,恭喜就完成了一大步了,走到这里那说明你的项目结构依赖已经没有问题了
注意如果打包的install的时候出现Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project controller: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode),那么你只需要在controller模块的pom中引入一下代码即可
maven-war-plugin 2.6 <!–如果想在没有web.xml文件的情况下构建WAR,请设置为false。–> false
错误原因是因为你的controller是war模式的,这个模式用阿里云下载的依赖建立的模块需要你有web.xml文件,如果你没有这个文件,那么在这你要告诉它不需要xml配置
5、整合mybatis,
(1)在父项目的pom中引入mybatis-plus依赖和mysql驱动依赖,如下:
mysql
mysql-connector-java
com.baomidou
mybatis-plus-boot-starter
3.2.0
(2)在entity模块下的pom引入lombok依赖,并写下数据库的实体类,
引入依赖:
org.projectlombok
lombok
true
新建数据库实体类:
package com.cys.entity.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
public class User extends Model {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String name;
private String password;
private LocalDateTime createTime;
}
(3)mapper模块下建立mapper接口和相关的配置文件
(4)在controller层要做的事,service层和接口层,在application.properties配置数据库地址和mybatis-plus,最后在启动类上面引入需要扫描的包和mapper
service层:
controller层
applition.properties:注意,数据库和mybatis-plus只能在controller层的配置文件里配置,在其他的地方配置会找不到
启动类配置:
最后启动项目,访问 http://localhost:8083/getUser?id=1
6、最后的注意点,如果你要把controller模块打war包,在tomcat发布,那么你需要在controller模块 的pom.xml引入servlet-api的包并移除spring boot的内嵌的tomcat,不然会报错:
终于写完了,再见



