您的位置:

Spring Boot多模块项目

一、Spring Boot多模块项目简介

在当今软件开发中,多模块项目已经变得越来越流行。在Spring Boot框架中,我们同样可以使用多模块来构建我们的项目。Spring Boot多模块项目可以帮助我们更好地实现项目的分层管理和提高代码的可维护性。下面将从几个方面详细介绍Spring Boot多模块项目的搭建和使用。

二、创建Spring Boot多模块项目

在开始之前,我们先来了解一下如何创建Spring Boot多模块项目。首先,我们需要使用Spring Initializr来快速创建一个Spring Boot父工程,具体步骤如下:

  1. 打开https://start.spring.io/,输入项目信息,包括项目名称、项目版本号等。
  2. 选择Project Metada选项卡,输入项目的元数据,包括GroupArtifactNameDescription等信息。
  3. 选择需要的依赖,例如Web、JPA、Thymeleaf等。
  4. 点击Generate按钮,下载生成的项目压缩包。

解压压缩包,在解压后的目录下使用mvn clean package命令编译项目。

三、Spring Boot多模块项目的结构

Spring Boot多模块项目的结构通常会有一个父模块和多个子模块。下面我们来看一下标准的Spring Boot多模块项目的结构:

├── parent
│   ├── pom.xml
│   ├── common
│   │   ├── pom.xml
│   ├── service
│   │   ├── pom.xml
│   ├── web
│   │   ├── pom.xml

在这个结构中,parent是父模块,commonserviceweb都是子模块。在实际项目中,还可以根据需要增加其他子模块。

四、Spring Boot多模块项目的搭建

1. 创建父模块

创建一个Spring Boot多模块项目的第一步是创建父模块。在父模块的pom.xml文件中,我们需要指定Spring Boot的父依赖和一些常用的依赖版本,如下所示:

<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.2</version>
    <relativePath/>
</parent>

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

<dependencies>
    <!-- Add your dependencies here -->
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

<modules>
    <module>common</module>
    <module>service</module>
    <module>web</module>
</modules>

在这段pom.xml文件中,<parent>元素指定了Spring Boot父依赖,<properties>元素指定了依赖版本,<dependencies>元素可以添加项目所需要的其他依赖,例如数据库、缓存等。然后最重要的是<build>元素,这里定义了构建Spring Boot项目所使用的插件,例如spring-boot-maven-plugin

2. 创建子模块

接下来,我们需要创建三个子模块:commonserviceweb。每个子模块都应该包含一个pom.xml文件,定义了子模块所需要的依赖和构建配置。下面是common子模块的pom.xml示例:

<parent>
    <groupId>com.example</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>
</dependencies>

在这个示例中,<parent>元素引用了父模块的pom.xml文件,<dependencies>元素定义了common模块所需要的依赖,包括Spring Boot的基础依赖和Jackson的依赖。

五、Spring Boot多模块项目的实战

1. 创建通用模块

在我们的多模块项目中,我们可以使用一个通用模块来存放一些共用的代码和配置,例如常量、工具类、拦截器等。在这个示例中,我们创建一个common子模块来存放一些共用的代码和配置。

首先,我们在common子模块中创建一个MyConstants类,并在其中定义一些常量,如下所示:

public class MyConstants {
    public static final String DATE_FORMAT = "yyyy-MM-dd";
}

然后,我们创建一个MyInterceptor类,继承自HandlerInterceptorAdapter,并在其中实现拦截器逻辑,如下所示:

public class MyInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(
            HttpServletRequest request,
            HttpServletResponse response,
            Object handler) throws Exception {
        // 在这里实现拦截器逻辑
        return true;
    }
}

common子模块的resources目录下,我们创建一个application.yml文件,并在其中添加以下内容:

my:
  date-format: yyyy-MM-dd

这个文件中定义了一个date-format配置项。

现在,我们已经在common子模块中创建了一些共用的代码和配置。下一步我们来创建service子模块和web子模块,来使用这些代码和配置。

2. 创建服务模块

service子模块是我们的业务逻辑实现模块,我们可以在这个模块中实现我们业务的逻辑。在这个示例中,我们创建一个UserService类,用来提供用户信息相关的业务操作。

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }
}

在这个示例中,我们使用@Service注解标记这个类为Spring Bean,使用@Autowired注解注入了一个UserRepository实例,用来实现持久化操作。然后我们定义了一个getUserById方法,用来根据id获取用户信息。

3. 创建Web模块

web子模块是我们的Web模块,我们可以在这个模块中实现我们的Web接口和页面。在这个示例中,我们创建一个UserController类,用来提供用户信息相关的接口操作。

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/user/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }
}

在这个示例中,我们使用@RestController注解标记这个类为Spring MVC的Controller类,使用@Autowired注解注入了一个UserService实例,用来调用业务逻辑处理。然后我们定义了一个getUserById方法,用来根据id获取用户信息,并返回给客户端。

现在,我们已经看到了如何使用Spring Boot多模块项目的优势来组织和管理我们的代码,包括创建父模块、子模块、通用模块、实现服务模块和Web模块等。通过这种方式,我们可以更好地实现代码分层管理和提高代码的可维护性。