'select the database only once in AbstractRoutingDataSource
I am using AbstractRoutingDataSource and I set the database at the beginning of the application, but when I add the @trasaction annotation it uses the default base
DataSourceContextHolder.setDataSoourceType(DataSourceType.R08);
is there any way to do it only once and use that database for all processes
public class DataSourceRouting extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey(){
return DataSourceContextHolder.getUserType();
}
public void initDatasource(DataSource r01ds,
DataSource r02ds,
DataSource r03ds,
DataSource r04ds,
DataSource r05ds,
DataSource r06ds,
DataSource r07ds,
DataSource r08ds,
DataSource r09ds){
Map<Object, Object> dataSourceMap = new HashMap<Object, Object>();
dataSourceMap.put(DataSourceType.R01, r01ds);
dataSourceMap.put(DataSourceType.R02, r02ds);
dataSourceMap.put(DataSourceType.R03, r03ds);
dataSourceMap.put(DataSourceType.R03, r03ds);
dataSourceMap.put(DataSourceType.R05, r05ds);
dataSourceMap.put(DataSourceType.R06, r06ds);
dataSourceMap.put(DataSourceType.R07, r07ds);
dataSourceMap.put(DataSourceType.R08, r08ds);
dataSourceMap.put(DataSourceType.R09, r09ds);
this.setTargetDataSources(dataSourceMap);
this.setDefaultTargetDataSource(r09ds);
}
}
public class DataSourceContextHolder {
private static final ThreadLocal<DataSourceType> contextHolder =
new ThreadLocal<DataSourceType>();
public static void setDataSoourceType(DataSourceType userType) {
Assert.notNull(userType, "UserType cannot be null");
contextHolder.set(userType);
}
public static DataSourceType getUserType() {
return (DataSourceType) contextHolder.get();
}
public static void clearUserType() {
contextHolder.remove();
}
}
DataSourceContextHolder.setDataSoourceType(DataSourceType.R08);
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
