SpringBoot(十四) 多模块运用与设计

在企业级的项目开发中,系统过于庞大时对应的开发人员的数量也会陆续的增加,正因为如此也会给开发人员业务逻辑之间对接增加一些不必要的困难,如果是开发人员过多时,项目提交代码以及逻辑交互起来依然会出现很多问题,并且如果多个项目公用同一个功能那么分离起来也比较麻烦。

针对这个情况我们可以采用多种的形式来处理,如:功能模块单独项目开发,功能模块分组,Maven项目Module形式。我们接下来就详细的讲解下有关Maven的Module的模式。

目标

基于SpringBoot项目设计Maven管理的多模块项目,便于模块对应生成Jar文件用于系统。

构建项目

我们采用IntelliJ IDEA工具来创建一个Maven项目



项目名必须一致,否则影响后面创建Module

pom.xml

pom.xml要添加对应SpringBoot的配置,因为Maven多模块项目内的模块并不能独立的存在,必须有一个介质来包含

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<groupId>com.ray</groupId>
<artifactId>springboot2-14</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging> <!--打包类型-->

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>

<dependencies>
<!--引入web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

详细配置

pom.xml内我们对应的添加了对SpringBoot的支持,因为我们需要使用SpringBoot来作为项目基本框架,并在pom.xml配置文件引入了Web模块的支持,所以介质项目内的Module都会用于Web依赖。

我们在介质Maven项目内创建三个Module,分别为:bean(所有实体类Module)、user(用户逻辑Module)、pager(页面Module)

创建实体Module(bean)

创建Module的方式与创建项目有点出入,我们点击项目名称后右键->New->Module->Maven


我在ArtifactId栏目填写了bean,证明这个项目是一个子项目,点击Next后创建Module即可,Module创建完成后的展现形式如下图所示:

之前创建的介质Maven项目还存在src目录,这个我们删掉就可以了,对于我们本章项目来说没有存在的意义

可以看到我们创建的模块的pom.xml配置文件内对应添加了parent节点项目是我们的介质项目,这也是Maven模块项目的好处,我们可以把共同引入的内容在介质项目的pom.xml配置文件内都引入,那么子项目也就会有相对应的依赖。

创建用户实体类

注意: 包名保持一致

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.ray.bean;

import java.io.Serializable;

/**
* @author Ray
* @date 2018/7/30 0030
*/
public class UserBean implements Serializable {

/**
* 用户名
*/
private String name;

/**
* 密码
*/
private String pwd;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPwd() {
return pwd;
}

public void setPwd(String pwd) {
this.pwd = pwd;
}
}

我们的实体创建完成后,bean项目就可以先放一放。

创建用户Module(user)

接下来我们再来编写user项目模块,流程还是一样,我们来创建一个user的Module,项目结构如下图所示:

我们user模块项目内需要使用bean模块项目内创建的用户实体,我们就可以在user模块项目内的pom.xml配置文件内添加对应的引入

引入bean模块

1
2
3
4
5
6
7
8
<dependencies>
<!--添加bean模块依赖-->
<dependency>
<groupId>com.ray</groupId>
<artifactId>bean</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>

下面我们来测试user模块项目添加了依赖后是否可以使用UserBean实体,我们在user模块项目内添加一个UserController并添加一些逻辑处理,如下图所示:

UserController

注意: 包名保持一致

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.ray.controller;

import com.ray.bean.UserBean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

/**
* @author Ray
* @date 2018/7/30 0030
*/
@Controller
public class UserController {

@RequestMapping(value = "/user/index")
public String index(HttpServletRequest request, UserBean userBean){
// 将name属性传入到user_index.jsp页面中展示
request.setAttribute("name", userBean.getName());
// 跳转user_index.jsp页面
return "user_index";
}
}

我们添加了一个index方法,当我们在浏览器访问/user/index地址时并且将传入的UserBean内的name属性值传入到user_index.jsp页面内,既然UserBean可以在user模块项目中使用,也就证明了我们的引入是没有问题的

创建页面模块(pager)

我们在user模块内配置了跳转user_index.jsp页面,所以我们需要对应添加一个专门存放页面的模块,创建web模块项目需要注意我们不选择Maven项目创建,而是选择SpringBoot项目类型创建



可以看到我们创建pager模块的maven配置文件pom.xml内对应parent节点的内容并不是我们的项目,并且我们项目配置文件对应的内容都已经配置,这里不用重复引用,所以我们这里需要手动修改下,改动后内容如下图所示:

详细配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<parent>
<groupId>com.ray</groupId>
<artifactId>springboot2-14</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>

<dependencies>
<!--引入用户模块-->
<dependency>
<groupId>com.ray</groupId>
<artifactId>user</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>


我们pager模块项目只需要引入user模块项目即可,如果你需要bean模块项目引入也一并添加dependency节点配置即可。

修改application.yml

1
2
3
4
5
spring:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp

创建JSP文件

根据上面的配置 JSP 所在位置:/webapp/WEB-INF/jsp/xx.jsp

1
2
3
4
5
6
7
8
9
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户列表</title>
</head>
<body>
欢迎:${name},使用SpringBoot多模块管理项目。
</body>
</html>

项目结构

注意1:由于 beanuser 的路径是 com.ray.xx.xx
注意2:所以 PagerApplicationServletInitializer 的路径必须是 com.ray,才能正常扫描。
注意3:删除pager 下Test测试类,否则启动Tomcat失败

配置本地Tomcat


启动Tomcat

访问地址: http://localhost:8080/user/index?name=Ray

可以看到我们成功的输出了内容,看着比较简单的一句话的输出,我们使用了三个项目模块来完成,正因为如此我们的模块化项目才能最大化的被引用并且使用。

总结

踩了一天的坑,注意几点即可:
(1)项目名必须一致,否则影响后面创建Module
(2)页面模块(pager) SpringBoot启动器必须在整体项目的根目录(com.ray)才能正常扫描
(3)其他模块必须在根目录(com.ray)基础上创建各包

-------------- 本文结束  感谢您的阅读 --------------