'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