Мультимодуль Spring Boot: bean-компоненты модуля зависимостей не загружаются после пакета mvn (компонент-декоратор игнорJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Мультимодуль Spring Boot: bean-компоненты модуля зависимостей не загружаются после пакета mvn (компонент-декоратор игнор

Сообщение Anonymous »

У меня есть многомодульный проект Spring Boot.
Модули:
  • модуль-1 → приложение Spring Boot (упаковано в виде работоспособного fat jar)
  • module-2 → приложение Spring Boot (также упаковано в виде fat jar)
  • module-3 → Приложение Spring Boot и общий модуль, содержащий Spring @Configuration и компонент-декоратор

Код: Выделить всё

module-1
зависит от модуля-3:

Код: Выделить всё

my.group
module-3
${project.version}

Внутри module-3 у меня есть класс конфигурации, который определяет декоратор для существующего компонента:

Код: Выделить всё

@Configuration
public class Module3Config {

@Bean
@Primary
public SomeService decoratedService(
@Qualifier("originalService") SomeService delegate,
@Value("${feature.enabled:false}") boolean featureEnabled
) {
return new DecoratedService(delegate, featureEnabled);
}
}
Декоратор:

Код: Выделить всё

public class DecoratedService implements SomeService {

private final SomeService delegate;
private final boolean featureEnabled;

public DecoratedService(SomeService delegate, boolean featureEnabled) {
this.delegate = delegate;
this.featureEnabled = featureEnabled;
}

@Override
public void doSomething() {
// custom logic
delegate.doSomething();
}
}
Мой основной класс Spring Boot в модуле-1:

Код: Выделить всё

@SpringBootApplication(scanBasePackages = {"com.product", "com.company"})
public class Module1Application {

public static void main(String[] args) {
SpringApplication.run(Module1Application.class, args);
}
}
Проблема
Когда я запускаю приложение из IDE, Spring правильно использует декоратор (компонент @Primary создается и внедряется).
Но после сборки и запуска fat jar:

Код: Выделить всё

mvn clean package
java -jar target/module-1.jar
компонент-декоратор не создан, а Spring вместо этого использует исходную реализацию.
Похоже, что конфигурация из модуля-3 не загружается во время выполнения при запуске упакованного jar, хотя:
  • Код: Выделить всё

    module-3
    присутствует как зависимость
  • сканирование компонента должно включать его
Вопрос
Как правильно гарантировать, что Spring Boot всегда загружает @Configuration классы (и bean-компоненты), поступающие из модуля зависимостей (module-3) в установка нескольких модулей?
Может ли это быть вызвано тем, что fat jar начинается с основного класса, отличного от ожидаемого (например, Start-Class, происходящего из другой зависимости)?

Если да, то как лучше всего обеспечить правильный основной класс/Start-Class при упаковке работоспособного jar?

Подробнее здесь: https://stackoverflow.com/questions/798 ... vn-package
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»