一般社団法人 全国個人事業主支援協会

COLUMN コラム

spring bootにてDB分割する要件があったので備忘録。

1. AbstractRoutingDataSource#determineCurrentLookupKeyをoverride
後に定義するdatasourceのmapのkey名を返却する処理を記述。
ex.
public class DynamicRoutingDataSourceResolver extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        return SchemaContextHolder.getSchemaType();
    }
}

2. datasourceのbeanを作成。

1.で作成したクラスにdatasourceのmapを設定。

ex.

@Configuration
public class DatasourceConfig { 
    @Bean
    public DataSource dataSource() { 
        DynamicRoutingDataSourceResolver resolver = new DynamicRoutingDataSourceResolver();
       Map<Object, Object> dataSources = new HashMap<Object,Object>();
       dataSources.put("datasource1", datasource1());
       dataSources.put("datasource2", datasource2());
       resolver.setTargetDataSources(dataSources); 
       resolver.setDefaultTargetDataSource(datasource1());
       return resolver; 
    }
...
}

3. repositoryを呼ぶ前にSchemaContextHolder.getSchemaTypeにdatasourceのkey名をが戻り値になる値を返却。スレッドセーフとするためにThreadLocalを使用すること。


The following two tabs change content below.

y.yoshida

最新記事 by y.yoshida (全て見る)

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア