Модули:
- модуль-1 → приложение Spring Boot (упаковано в виде работоспособного fat jar)
- module-2 → приложение Spring Boot (также упаковано в виде fat jar)
- module-3 → Приложение Spring Boot и общий модуль, содержащий Spring @Configuration и компонент-декоратор
Код: Выделить всё
module-1Код: Выделить всё
my.group
module-3
${project.version}
Код: Выделить всё
@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();
}
}
Код: Выделить всё
@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
Похоже, что конфигурация из модуля-3 не загружается во время выполнения при запуске упакованного jar, хотя:
- присутствует как зависимость
Код: Выделить всё
module-3 - сканирование компонента должно включать его
Как правильно гарантировать, что Spring Boot всегда загружает @Configuration классы (и bean-компоненты), поступающие из модуля зависимостей (module-3) в установка нескольких модулей?
Может ли это быть вызвано тем, что fat jar начинается с основного класса, отличного от ожидаемого (например, Start-Class, происходящего из другой зависимости)?
Если да, то как лучше всего обеспечить правильный основной класс/Start-Class при упаковке работоспособного jar?
Подробнее здесь: https://stackoverflow.com/questions/798 ... vn-package
Мобильная версия