Переопределить классы SpringBootJar во время выполнения - PullRequest
0 голосов
/ 15 октября 2019

Я работаю с системой, в которой мы создаем микро-сервис SpringBoot. Этот микро сервис будет связываться с внешними системами через интерфейс SystemAdapter. Мы создаем API для людей, чтобы создавать свои собственные системные адаптеры. То, что я ищу, - это способ запуска моего микросервиса - передайте jar на classPath и используйте его для реализации SystemAdapater, а не для реализации по умолчанию, встроенной в jar.

Есть ли прямая задача сделать это с Gradle и задачей bootJar SpringBoot.

Один из подходов, которые я попытался сделать, был:

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

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

bootJar.dependsOn(saJar)

Я пытался выписать 2разные банки, но я не мог заставить

java -cp SA.jar -jar microService.jar реально работать

Спасибо за любую помощь, которая может быть предложена.

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Взгляните на средство запуска свойств весенней загрузки, оно позволит вам аккуратно загрузить внешние реализации SystemAdapter.
Чтобы включить PropertiesLauncher:
1. в основном приложении установите макет приложения на ZIP

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

в комплекте реализации установите макет на MODULE

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

Добавьте следующую команду, чтобы указать папку, в которой находятся внешние файлы jar.

java -Dloader.path = file: / path / to / SystemAdaptery-Implementations-folder -jar main-app.jar

Это было для загрузки реализаций, вы можете связать его с Spring Boot ServiceLoader (или просто загрузчиком службы jdk), чтобы зарегистрировать экземпляры реализации SystemAdaptery и управлять их вызовами.

0 голосов
/ 15 октября 2019

У вас может быть много бинов, реализующих интерфейс SystemAdapter, доступный в контексте Spring, вам просто нужно убедиться, что они вставлены в поле List:

 List<SystemAdapter> systemAdapters;

Затем ваш кодпросто нужно выяснить, какой из этих бобов следует использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...