springboot 构建多模块项目

2年前 (2022) 程序员胖胖胖虎阿
326 0 0

        记录下spring boot 多模块项目的设置过程;首先简单说下为啥需要多模块,一个模块分目录行不行,当然可以,但是这样会导致多个团队开发的时候混乱,会有很多冲突;如果根据领域设计将项目按照不同的领域进行划分,后续维护起来会方便很多;对于以后如果进行微服务的拆分也是很方便的,直接将对应的模块迁移成一个单独的服务即可;还有针对业务初期,可以考虑一个大的项目,不同的功能,比如商城,下单,支付分别建立不同的模块,后期如果业务发展迅速,直接拆分成对应的模块为微服务项目即可;

接下来会用一个简单的项目演示,将springboot的web层,service层,dao层拆分成不同的模块;通过一个简单的crud来测试下;

项目目录结构

springboot 构建多模块项目

1.首先最外层是pom.xml;最外层的pom,作为项目的root pom,文件如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.4</version>
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo-multiple</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <properties>
        <java.version>1.8</java.version>
        <project.version>0.0.1-SNAPSHOT</project.version>
    </properties>
    <modules>
      <module>web</module>
      <module>service</module>
      <module>dao</module>
    </modules>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>demo-service</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>demo-web</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>demo-dao</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

我们一般定义整个项目的依赖,比如spring-boot-starter-parent;这里同时指定了整个项目有三个模块,分别是web,service,dao;

同时在dependencyManagement中设置了项目的依赖的版本管理;也就是下面的子模块以来的版本不需要指定版本了,比如web依赖了service这个模块,不需要设置版本,版本统一在这里进行管理;

2.web 模块

pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>demo-multiple</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo-web</artifactId>
    <version>${project.version}</version>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>demo-service</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

每个子模块会设置parent的信息,同时自己的版本也从根pom中变量获取,同时以来的demo-servce我们看到是没有设置版本的;

web中的项目启动类如下

springboot 构建多模块项目

 同时,我们在web中写了一个controller,请求如下

springboot 构建多模块项目

这个地方的TestService是demo-service这个module中的;

同时资源文件设置了数据库的连接信息

springboot 构建多模块项目

data.txt是数据库的初始化脚本,这里我们用的h2的数据库

springboot 构建多模块项目 3.service模块

pom中以来了dao模块

springboot 构建多模块项目

同时我们简单写一个查询方法,这个查询方法以来与dao模块

springboot 构建多模块项目 4.dao模块

dao模块对数据库进行操作,我们使用jpa,依赖如下所示

springboot 构建多模块项目

同时写一个简单的查询

springboot 构建多模块项目

对应的数据库实体如下所示

springboot 构建多模块项目

之后我们运行项目,启动之后,访问这个地址

http://localhost:8086/test1

 会将数据库的用户信息打印出来,结果如下

[XwjUser{id=11, name='张三', age=12, createDate=2020-04-17 00:00:00.0}, XwjUser{id=12, name='李四', age=13, createDate=2020-04-17 00:00:00.0}, XwjUser{id=13, name='王五', age=25, createDate=2020-04-17 00:00:00.0}, XwjUser{id=14, name='赵六', age=17, createDate=2020-04-17 00:00:00.0}, XwjUser{id=15, name='吉米', age=30, createDate=2020-04-17 00:00:00.0}]

总结:在跟pom中定义springboot-start作为整个项目的parent,然后配置整个项目的module信息;

同时在dependence-manage定义依赖版本管理,这样子项目中不用指定版本,只引入依赖;好处是多个子项目共同依赖版本发生变化时,只修改跟pom中设置的版本变量即可;同时各个子模块的package最好相同,这样在启动类中,设置一个扫描即可;

@SpringBootApplication(scanBasePackages = {"com.example.multiple"})

整个项目的资源文件放在web目录下;

版权声明:程序员胖胖胖虎阿 发表于 2022年9月22日 下午3:32。
转载请注明:springboot 构建多模块项目 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...