spring boot 多模块项目的构建以及配置文件的读取

 

 

在目前的开发过程中,我们有一个服务需要用到第三方的硬件API,目前初步的想法是把这块服务单独做成一个模块来集成到项目中。那么就会涉及到springboot项目多模块构建,打包的问题。在此分享一下我填坑的解决办法。让我们开始吧。

基本配置:

1.创建父文件项目multiboot

在IDEA开发工具中,采用spring Initializr新建项目时生成的项目结构如下:

红框中的文件都是没必要的,为了项目看起来整洁,我们将其删除,同时src目录也是没用的,我们只留下如下的目录结构:

2.将其父级设置为Spring Boot启动父级:

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

3.使用Spring Initializr(来自网站或IDE)在父文件夹下创建不同的Spring Boot模块:例如 reposerviceweb。为每个依据设置相关的依赖关系。

如果使用IntelliJ IDEA,使用File非常简单    单击模块,然后从菜单中选择Spring Initializr。

4.将新建的module添加到父POM中:

<project...>
    <modules>
        <module>repo</module>
        <module>service</module>
        <module>web</module>
    </modules>
</project>

5.最终的项目结构如下:

6.在模块POM中:

parent坐标更改为父POM坐标而不是spring-boot-starter-parent

将部分移动properties到父POM

将部分移动build到父POM,嵌套pluginspluginManagement

可选:清除不必要的标记,例如packaging(默认为jargroupIdversion(从父级继承),name以及description

7.模块中剩下的内容POM应该非常简洁,仅包含parentartifactId并且dependencies

<project ...>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>service</artifactId>

    <!-- 继承本项目的父工程 -->
    <parent>
        <groupId>com.example</groupId>
        <artifactId>multiboot</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
</project>

8.去掉service与serviceImpl模块的启动类入口。

9.在serviceImpl模块中添加依赖service    ,web模块依赖serviceImpl,service

10.打包

我们可以在父项目中点击package来打包

 

另外多模块的时候我们该如何在其他模块中读取配置文件的信息呢?

在主入口项目的application.properties文件中增加如下配置

# 配置文件
#思科接口访问请求地址前缀
UrlFront=https://10.50.3.33:8443/api/v1/
#用户名   接口请求需要basic auth 认证
UserName=admin
#密码
PassCode=VMware1!

在其他模块我们可以通过依赖

org.apache.commons.configuration.Configuration组件来读取,这里主模块和要读取配置文件的模块都需要依赖这个组件:
  <!-- 读取配置文件-->
        <dependency>
            <groupId>commons-configuration</groupId>
            <artifactId>commons-configuration</artifactId>
            <version>1.10</version>
        </dependency>
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;

/**
 * @Author: bo zhang
 * @Description:
 * @Date:Create:in 2018-09-17 14:29
 * @Modified By:暂无
 */
public class Setting {
  /*
    请求思科api的时候需要这三个参数
    private String  UrlFront;
    private String  UserName;
    private String  PassCode;*/
    private static Configuration myConfig=getConfig();

    public static String getUrlFront() {
        return myConfig.getString("UrlFront");
    }

    public static String getUserName() {
        return myConfig.getString("UserName");
    }

    public static   String getPassCode() {
        return myConfig.getString("PassCode");
    }

    /**
     * 获取配置信息
     */
    private static   Configuration getConfig() {
        try {
            return new PropertiesConfiguration("classpath:/application.properties");
        } catch (ConfigurationException e) {
            throw new RuntimeException("获取配置文件失败,", e);
        }
    }

这样在Setting类我们可以读到主模块的属性值。

总结

与标准的Spring Boot单模块应用程序相比,设计多模块Spring Boot应用程序需要大量手动设置。

这篇文章的完整源代码可以在我的Github上找到。

猜你喜欢

转载自blog.csdn.net/qq_35716892/article/details/82960571