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

默认SDK读取配置文件:
读取配置文件目录:项目模块/resources/
动态指定覆盖默认配置文件:
读取配置文件目录:项目模块/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_web
的pom.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
目录下文件
