Cześć. Mam wymaganie aby zapisać w pewnym procesie 2 encje. Encja: FirstEntity
oraz SecondEntity
reprezentują 2 tabelki z różnych baz danych.
Klasa PostgresSqlDataSourceConfig
szuka repozytorium oraz encji z module1
(ThirdEntity
) oraz module2
(FirstEntity
). PostgresSqlDataSourceConfig
umieszczona jest w module shared
, ponieważ reszta modułów używa tej konfiguracji do połączenia się z bazą.
@Configuration(proxyBeanMethods = false)
@EnableJpaRepositories(basePackages = {"com.example.demo.module1", "com.example.demo.module2"})
class PostgresSqlDataSourceConfig
Klasa MySqlDataSourceConfig
szuka repozytoria oraz encji z module2
(SecondEntity
). MySqlDataSourceConfig
umieszczona jest w module2
, ponieważ tylko module2
używa konfiguracji do połączenia z bazą.
@Configuration(proxyBeanMethods = false)
@EnableJpaRepositories(basePackages = "com.example.demo.module2")
class MySqlDataSourceConfig {
Przy starcie aplikacji oczywiście Spring nie pozwala MySqlDataSourceConfig
na skanowanie repozytoria, które już jest wykryte przez PostgresSqlDataSourceConfig
. (Z racji tego, że skanuje scieżkę: com.example.demo.module2
.
Chcę zachować taką strukturę modułów, gdzie jedynym punktem wejścia jest fasada.
Wiem, że mógłbym rozwiązać ten problem tworzyć podpakiet w pakiecie module2
i umieścić w nim encję FirstEntity
oraz repozytorium FirstEntityRepository
. Następnie w klasie konfiguracyjnej PostgresSqlDataSourceConfig
podać podpakiet w adnotacji @EnableJpaRepositories
.
W takim podejściu encja oraz repozytorium musiałoby być publiczne (czego chciałbym uniknąć), ponieważ w fasadzie byłby zapis do bazy.
Reasumując: Problemem jest fakt, że obie encje należą do jednej domeny natomiast znajdują się w innych bazach przez co obie klasy konfiguracyjne się gryzą, ponieważ skanują te same ścieżki. W jaki najrozsądniejszy sposób umieścić taką encję i repozytorium aby zachować modułowość i nie wystawiać jako public?
Z góry dzięki za odpowiedź.