gpt4 book ai didi

java - 在运行时重写 SpringBootJar 类

转载 作者:行者123 更新时间:2023-12-02 09:25:08 24 4
gpt4 key购买 nike

我正在使用一个系统,我们正在其中创建 SpringBoot 微服务。该微服务将通过 SystemAdapter 接口(interface)与外部系统通信。我们正在创建一个 API,供人们构建自己的系统适配器。我正在寻找一种启动微服务的方法 - 在 classPath 上传递一个 jar 并让它使用 SystemAdapter 的实现,而不是嵌入在 jar 中的默认实现。

有没有直接使用 Gradle 和 SpringBoot 的 bootJar 任务来完成此操作。

我尝试采取的一种方法是:

bootJar {
exclude '**/adapters/**'
}

task saJar(type: Jar) {
from sourceSets.main.output
include '**/adapters/**'
baseName 'SA'
}

bootJar.dependsOn(saJar)

我尝试写出2个不同的 jar ,但我无法得到

java -cp SA.jar -jar microService.jar 实际工作

感谢您提供的任何帮助。

最佳答案

看看 Spring Boot 属性启动器,它将允许您干净地加载外部 SystemAdapter 实现。
要启用 PropertiesLauncher:
1. 在主应用程序中将应用程序布局设置为 ZIP

springBoot{ mainClass = "..." layout = "ZIP" ... }

  • 在实现包中将布局设置为MODULE
  • springBoot{ mainClass = "..." layout = "MODULE" ... }

  • 添加以下 cli arg 以指向外部 jar 所在的文件夹。
  • java -Dloader.path=file:/path/to/SystemAdaptery-implementations-folder -jar main-app.jar

    这是为了加载实现,您可以将其与 spring boot ServiceLoader(或简称 jdk 服务加载器)结合起来以注册 SystemAdaptery 实现实例并管理它们的调用。

    关于java - 在运行时重写 SpringBootJar 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58395481/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com