利用spring AutoDatabaseConfiguration可以自动配置数据源。但是如果项目需要同时使用多个数据源,spring原生的配置方式无法满足。spring提供了 AbstractRoutingDataSource,可以自定义数据源解决类似的自定义需求。

最佳的配置方式,应该和spring情况类似,不侵入原有业务。下面提供一种结合 localThread@annotationAspect 的方案。

  1. 创建一个 ComposeDataSource bean, 实现spring 的 AbstractRoutingDataSource,并exclude spring AutoDatabaseConfiguration。
  2. ComposeDataSource 初始化方法里,初始化的多数据源,并设置到 DataSourceMap 中,其中key为数据源id,value为数据源实例。
  3. 执行数据库操作的方法上使用自定义注解,指定数据源id。
  4. 使用 aspect,具体实现方法使用aspectj或者sping aspect,参考@Async文章,通过id查询数据源,并配置到 localThread
  5. 执行数据库操作的方法时,调用 ComposeDataSource 的 getConnect 方法,从localThread获得实际数据源。

一句话
12 声望1 粉丝