目录
1. 新建 springboot-parent 父级项目,项目结构如图
3. 在父级项目 springboot-parent 右键新建 Maven module 选项,创建子模块 springboot-service,项目结构如图
5. 在父级项目 springboot-parent 右键新建 Maven module 选项,创建子模块 springboot-controller,项目结构如图
7. 分别在 springboot-service,springboot-controller 添加对应方法
简介
前面介绍的项目都是一个整体的 SpringBoot 项目,在实际的开发过程中,特别是微服务部分,经常需要将各个功能模块分开,使用 Maven 就能很好的实现这个效果
项目需求
搭建一个 springboot-parent 父级项目,搭建 springboot-controller,springboot-service 分模块
依赖关系
↗ springboot-controller(子)
springboot-parent(父) ↓
↘ springboot-service(子)
实现步骤
1. 新建 springboot-parent 父级项目,项目结构如图
2. 在 pom 文件添加如下配置
<groupId>com.ibm.spring</groupId>
<artifactId>springboot-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>springboot-parent</name>
<url>http://maven.apache.org</url>
<!-- 添加spring boot的父节点依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
<relativePath/>
</parent>
<properties>
<!-- 项目源码编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 项目构建编码 -->
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 指定JDK版本 -->
<java.version>1.8</java.version>
<!- 子模块 Controller 版本-->
<module.controller.version>0.0.1-SNAPSHOT</module.controller.version>
<!- 子模块 Service 版本-->
<module.service.version>0.0.1-SNAPSHOT</module.service.version>
</properties>
<modules>
<!-- 子模块 server -->
<module>springboot-controller</module>
<module>springboot-service</module>
</modules>
<dependencies>
<!-- 添加 springboot web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!- 子模块 Controller 依赖-->
<dependency>
<groupId>com.ibm.springboot</groupId>
<artifactId>springboot-controller</artifactId>
<version>${module.controller.version}</version>
</dependency>
<!- 子模块 Service 依赖-->
<dependency>
<groupId>com.ibm.springboot</groupId>
<artifactId>springboot-service</artifactId>
<version>${module.service.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
注意:
(1) 对于父级项目,packaging 应设置成 pom 格式,否则无法添加子模块
(2) 上面配置中加粗部分实际上应该是后面两个子模块创建完毕后根据子模块信息添加
3. 在父级项目 springboot-parent 右键新建 Maven module 选项,创建子模块 springboot-service,项目结构如图
4. 在 pom.xml 配置文件中添加如下配置
<parent>
<groupId>com.ibm.spring</groupId>
<artifactId>springboot-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.ibm.springboot</groupId>
<artifactId>springboot-service</artifactId>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 引入其他依赖 -->
</dependencies>
5. 在父级项目 springboot-parent 右键新建 Maven module 选项,创建子模块 springboot-controller,项目结构如图
6. 在 pom,xml 配置文件中添加如下配置
<parent>
<groupId>com.ibm.spring</groupId>
<artifactId>springboot-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>springboot-controller</artifactId>
<name>springboot-controller</name>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 添加 service 模块依赖 -->
<dependency>
<groupId>com.ibm.springboot</groupId>
<artifactId>springboot-service</artifactId>
</dependency>
</dependencies>
注意:Controller 模块需调用 Service 模块,所以在 springboot-controller 子模块中要添加 springboot-service 依赖
7. 分别在 springboot-service,springboot-controller 添加对应方法
springboot-service
@Service
public class TestService {
public String getMessage() {
return "test message";
}
}
springboot-controller
@RestController
@RequestMapping("/test")
public class TestController {
@Resource
private TestService testService;
@GetMapping("/msg")
public String getMessageFromService() {
return testService.getMessage();
}
}
总结
1. 父级项目添加子模块的配置有两处,分别在 <modules> 和 <dependencyManagement> 下,子模块的信息一定要填写准确
2. 由于 Controller 模块还作为启动模块,特别要主要各个模块之间的包名的关系
如果 Controller 模块的启动类 App.class 所在的包和 Service 层所在的包名不匹配,则需要在启动类上添加 @ComponentScan 或 @ComponentScans 注解添加要扫描的包的路径;最佳实践:Controller 层的启动包名应是其他被调用子模块包名的父级关系(包含关系)。