Introduce initialize() in AbstractRouting[DataSource|ConnectionFactory]
This commit introduces initialize() methods in AbstractRoutingDataSource and AbstractRoutingConnectionFactory as an alternative to invoking afterPropertiesSet(). Closes gh-31248
This commit is contained in:
@@ -116,6 +116,15 @@ public abstract class AbstractRoutingDataSource extends AbstractDataSource imple
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() {
|
||||
initialize();
|
||||
}
|
||||
|
||||
/**
|
||||
* Synchronizes targetDataSources to resolvedDataSources
|
||||
* and defaultTargetDataSource to resolvedDefaultDataSource.
|
||||
* @throws IllegalArgumentException in case of targetDataSources is null
|
||||
*/
|
||||
public void initialize() {
|
||||
if (this.targetDataSources == null) {
|
||||
throw new IllegalArgumentException("Property 'targetDataSources' is required");
|
||||
}
|
||||
|
||||
@@ -146,6 +146,31 @@ class AbstractRoutingDataSourceTests {
|
||||
assertThat(routingDataSource.determineTargetDataSource()).isSameAs(ds);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testInitialize_synchronizeTargetDataSourcesToResolvedDataSources() {
|
||||
AbstractRoutingDataSource routingDataSource = new AbstractRoutingDataSource() {
|
||||
@Override
|
||||
protected Object determineCurrentLookupKey() {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
DataSource ds1 = new StubDataSource();
|
||||
DataSource ds2 = new StubDataSource();
|
||||
|
||||
Map<Object, Object> targetDataSources = new HashMap<>();
|
||||
targetDataSources.put("ds1", ds1);
|
||||
targetDataSources.put("ds2", ds2);
|
||||
routingDataSource.setTargetDataSources(targetDataSources);
|
||||
|
||||
routingDataSource.initialize();
|
||||
|
||||
Map<Object, DataSource> resolvedDataSources = routingDataSource.getResolvedDataSources();
|
||||
assertThat(resolvedDataSources).hasSize(2);
|
||||
assertThat(resolvedDataSources.get("ds1")).isSameAs(ds1);
|
||||
assertThat(resolvedDataSources.get("ds2")).isSameAs(ds2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void notInitialized() {
|
||||
AbstractRoutingDataSource routingDataSource = new AbstractRoutingDataSource() {
|
||||
|
||||
Reference in New Issue
Block a user