在目前的开发过程中,我们有一个服务需要用到第三方的硬件API,目前初步的想法是把这块服务单独做成一个模块来集成到项目中。那么就会涉及到springboot项目多模块构建,打包的问题。在此分享一下我填坑的解决办法。让我们开始吧。
基本配置:
1.创建父文件项目multiboot
在IDEA开发工具中,采用spring Initializr新建项目时生成的项目结构如下:
红框中的文件都是没必要的,为了项目看起来整洁,我们将其删除,同时src目录也是没用的,我们只留下如下的目录结构:
2.将其父级设置为Spring Boot启动父级:
org.springframework.boot
spring-boot-starter-parent
2.0.0.RELEASE
3.使用Spring Initializr(来自网站或IDE)在父文件夹下创建不同的Spring Boot模块:例如 repo
,service
和web
。为每个依据设置相关的依赖关系。
如果使用IntelliJ IDEA,使用File非常简单 新 单击模块,然后从菜单中选择Spring Initializr。
4.将新建的module添加到父POM中:
repo
service
web
5.最终的项目结构如下:
6.在模块POM中:
将parent
坐标更改为父POM坐标而不是spring-boot-starter-parent
将部分移动properties
到父POM
将部分移动build
到父POM,嵌套plugins
到pluginManagement
可选:清除不必要的标记,例如packaging
(默认为jar
)groupId
和version
(从父级继承),name
以及description
。
7.模块中剩下的内容POM应该非常简洁,仅包含parent
,artifactId
并且dependencies
:
4.0.0
service
com.example
multiboot
0.0.1-SNAPSHOT
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组件来读取,这里主模块和要读取配置文件的模块都需要依赖这个组件:
commons-configuration
commons-configuration
1.10
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上找到。