Реализация SpringR AbstractRoutingDatasource путем динамического определения фактического источника данных на основе текущего контекста. Ссылался на эту статью: https://www.baeldung.com/spring-abstract-routing-data-source.
Здесь при запуске приложения весенней загрузки. Создана карта контекстов для объектов источника данных для настройки нашего AbstractRoutingDataSource. Все эти детали контекста клиента извлекаются из таблицы базы данных.
@Bean
@DependsOn("dataSource")
@Primary
public DataSource routeDataSource() {
RoutingDataSource routeDataSource = new RoutingDataSource();
DataSource defaultDataSource = (DataSource) applicationContext.getBean("dataSource");
List<EstCredentials> credentials = LocalDataSourcesDetailsLoader.getAllCredentails(defaultDataSource); // fetching from database table
localDataSourceRegistrationBean.registerDataSourceBeans(estCredentials);
routeDataSource.setDefaultTargetDataSource(defaultDataSource);
Map<Object, Object> targetDataSources = new HashMap<>();
for (Credentials credential : credentials) {
targetDataSources.put(credential.getEstCode().toString(),
(DataSource) applicationContext.getBean(credential.getEstCode().toString()));
}
routeDataSource.setTargetDataSources(targetDataSources);
return routeDataSource;
}
Проблема заключается в том, что если я добавлю новые данные клиента, я не смогу получить их в routeDataSource. Очевидная причина в том, что эти значения устанавливаются при запуске.
Как мне добиться добавления нового контекста клиента, и мне пришлось заново инициализировать объект routeDataSource.
Планирование написать сервис для получения всего нового контекста клиента и сброса объекта routeDataSource, не нужно перезапускать сервер каждый раз, когда вносятся какие-либо изменения в детали клиента.