Obecnie piszemy aplikację, która jest podzielona na wiele projektów / modułów. Na przykład weźmy następujące moduły:
- myApp-DAO
- myApp-jabber
Każdy moduł ma własny plik XML kontekstu Spring. Dla modułu DAO mam PropertyPlaceholderConfigurer, który czyta plik właściwości z niezbędnymi parametrami połączenia bazy danych. W module Jabber mam również PropertyPlaceHolderConfigurer dla właściwości połączenia Jabber.
Teraz pojawia się główna aplikacja, która obejmuje myApp-DAO i myApp-jabber. Czyta wszystkie pliki kontekstowe i uruchamia jeden duży kontekst Spring. Niestety wydaje się, że może istnieć tylko jeden element PropertyPlaceholderConfigurer na kontekst, więc którykolwiek moduł zostanie załadowany jako pierwszy, będzie w stanie odczytać parametry połączenia. Drugi zgłasza wyjątek z błędem typu „Nie można rozpoznać symbolu zastępczego„ jabber.host ””
Rozumiem, na czym polega problem, ale tak naprawdę nie znam rozwiązania - ani najlepszej praktyki w moim przypadku.
Jak skonfigurować każdy moduł, aby każdy mógł załadować swój własny plik właściwości? W tej chwili przeniosłem PropertyPlaceHolderConfigurer z oddzielnych plików kontekstowych i połączyłem je z kontekstem głównej aplikacji (ładowanie wszystkich plików właściwości za pomocą jednego PropertyPlaceHolderConfigurer). To jest jednak do bani, ponieważ teraz każdy, kto używa modułu dao, musi wiedzieć, że potrzebuje PropertyPlaceHolderConfigurer w swoim kontekście ... również testy integracji w module dao kończą się niepowodzeniem itp.
Jestem ciekawy rozwiązań / pomysłów od społeczności stackoverflow.