Cześć,
wyobrażam sobie aplikację podzieloną w ten sposób
|
|--- module 1
|
|- Configuration1.java
|
|--- module 2
|
|- Configuration2.java
|
|--- mainModule
|
|- Application // tutaj jest main() i wywołanie SpringApplication.run
|- application.yaml
Oczywiście w uproszczeniu, każdy moduł ma swój build.gradle
, testy, kod źródłowy, resources.
Każdy moduł jest samodzielny i nie wie nic na temat świata poza nim. Tylko main module spina wszystko do kupy i uruchamia appkę.
Poprzez gradle wrzucam sobie submoduły do głównego modułu
implementation(
project(':module1'),
project(':module2'),
)
I teraz tak - każdy submoduł ma swój scope i swoje beany. Nie powinny one być widoczne poza modułem (lub nie powinny być widoczne dla innych podmodułów). Każdy submoduł ma swoje serwisy, repozytoria, http kontrolery... W idealnym scenariuszu wyobrażam sobie to tak, że dołączam moduł i mam gotowy nowy feature w aplikacji.
Wiem, że mogę sobie normalnie utworzyć aplikację wielomodułową, ale wtedy mam osobny run aplikacji per moduł. Każdy moduł ma swój SpringApplication.run. W przyszłości możliwe, że będę szedł w mikroserwisy, na teraz jest na to za wcześnie. Potrzebuję dobrze ogarnięty modularny monolit w jednej paczce, jeśli będzie potrzeba to niedużym nakładem pracy podzielę appkę na zupełnie niezależne, osobne moduły.
Ale wracając - każdy submoduł ma swoje beany, np
@Configuration
class Configuration1 {
@Value("${property.from.main.module}")
private String propertyFromMainModule;
@Bean
public Bean1 bean1() {
// using propertyFromMainModule to create the bean
}
}
problem jest taki, że propertisy z application.yaml są zdefiniowane w main module i nie przenikają one do submodułów. Nie da się ich także zdefiniować na poziomie submodułów (osobny application.yaml per moduł - nie ładuje i wyrzuca wyjątek, że nie znaleziono propertisa). Nie da się także zinicjalizować beanów na poziomie main module, bo nie są one widoczne w danym submodule, do którego bean należy.
Macie jakiś pomysł jak wstrzyknąć properties z application yaml do submodułów?
Albo może doradzicie jakiś inny, sprawdzony approach na modularny monolit wg opisanych założeń.
Dzięki!