我正在使用一个系统在其中创建SpringBoot微服务。该微服务将通过SystemAdapter
接口与外部系统通信。我们正在创建一个API,供人们构建自己的系统适配器。我正在寻找一种启动微服务的方法-在classPath中传递一个jar,并使其使用SystemAdapater
的实现,而不是嵌入jar中的默认实现。
是否可以直接使用Gradle和bootJar
的{{1}}任务来做到这一点。
我尝试采用的一种方法是:
SpringBoot
我试图写出2个不同的Jars,但我没得到
bootJar {
exclude '**/adapters/**'
}
task saJar(type: Jar) {
from sourceSets.main.output
include '**/adapters/**'
baseName 'SA'
}
bootJar.dependsOn(saJar)
才能正常工作
感谢您能提供的任何帮助。
答案 0 :(得分:1)
看看spring boot properties launcher,它将使您能够干净地加载外部SystemAdapter实现。
启用PropertiesLauncher:
1.在主应用中,将应用布局设置为ZIP
springBoot { mainClass =“ ...” 布局=“邮政编码” ...}
MODULE
springBoot { mainClass =“ ...” 布局=“模块” ... }
java -Dloader.path = file:/ path / to / SystemAdaptery-implementations-folder -jar main-app.jar
那是用于加载实现的,您可以将其与spring boot的ServiceLoader(或简单地是jdk服务加载器)耦合,以注册SystemAdaptery实现实例并管理其调用。
答案 1 :(得分:0)
在Spring上下文中,您可以有许多实现SystemAdapter
接口的bean,您只需要确保将它们注入到List
字段中即可即可。
List<SystemAdapter> systemAdapters;
然后您的代码只需要弄清楚应该使用这些bean中的哪个。