项目简述

我的需求:将XX接口的封装SDK,在不同项目中引入jar包/maven私库,实现一次维护,多项目使用。

默认SDK读取配置文件:

读取配置文件目录:项目模块/resources/

  • default_xx_config.yml - 默认启用yml格式配置文件

  • default_xx_config.properties - 按需集成properties配置文件

动态指定覆盖默认配置文件:

读取配置文件目录:项目模块/resources/xx_sdk/config.yml

default_xx_config.yml

jsUser:
appNo: demoAppNo
appKey: demoAppKey
url:
demoUrl: /api/xx/getXXX

JsUserModel.java

jsUser 对应的 yml 文件中配置,其余appNo\appKey\url等不予展示,不影响理解。

public class JsUserModel {

private JsUser jsUser;

public JsUser getJsUser() {
return jsUser;
}

public void setJsUser(JsUser jsUser) {
this.jsUser = jsUser;
}

public JsUserModel() {
}
}

GetYmlConfig.java

import org.xxx.com.jsuser.model.JsUserModel;
import org.yaml.snakeyaml.Yaml;

import java.io.InputStream;
import java.util.StringJoiner;


public class GetYmlConfig {

static Yaml yaml = new Yaml();

static JsUserModel jsUserModel ;

static{
jsUserModel = loadConfig();
}

public static JsUserModel loadConfig() {
InputStream inputStream = null;

if( jsUserModel != null ){
return jsUserModel;
}

try {
// 尝试加载外部配置文件
inputStream = GetYmlConfig.class.getClassLoader().getResourceAsStream("xx_sdk/config.yml");
if (inputStream == null ) {
// 加载JAR包内部的默认配置文件
inputStream = GetYmlConfig.class.getClassLoader().getResourceAsStream("default_xx_config.yml");
System.out.println("External configuration not found. Loading default configuration from JAR.");
}

if (inputStream != null) {
return yaml.loadAs(inputStream, JsUserModel.class);
} else {
throw new RuntimeException("Configuration file not found.");
}
} catch (Exception e) {
throw new RuntimeException("Failed to load configuration", e);
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
} catch (Exception e) {
throw new RuntimeException("Failed to close configuration file", e);
}
}
}


}

使用示例

// 从配置文件中获取配置信息
JsUserModel jsUserModel = GetYmlConfig.loadConfig();

SpringBoot多模块项目中使用

截图为:手动引入jar包方式,并动态设置

项目pom文件中引入jar包

<dependency>
<groupId>org.xxx.com</groupId>
<artifactId>xx_sdk</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/xx_sdk.jar</systemPath>
</dependency>

打包注意

将引入jar包打包到项目.war部署项目文件中

注意,此处需要修改module_webpom.xm文件,非项目根目录下pom.xm文件,因为module_web是最终打包发布的web目录。

<build>

<!--Maven_Plugins插件-->
<plugins>
<!--已省略plugins插件配置-->
</plugins>

<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>

<!--配置文件打包到classes目录下-->
<resource>
<directory>${project.basedir}/../module_xxx_server/src/main/resources/</directory>
<targetPath>${project.build.directory}/${project.build.finalName}/WEB-INF/classes/</targetPath>
<includes>
<include>**/*.yml</include>
</includes>
</resource>

<!--第三方jar包打包到WEB-INF目录下-->
<resource>
<directory>${project.basedir}/../module_site_server/src/main/resources/lib/</directory>
<targetPath>${project.build.directory}/${project.build.finalName}/WEB-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>

</resources>

<finalName>web</finalName>
</build>

项目maven打包package后查询target目录下文件