利用spring AutoDatabaseConfiguration可以自动配置数据源。但是如果项目需要同时使用多个数据源,spring原生的配置方式无法满足。spring提供了 AbstractRoutingDataSource,可以自定义数据源解决类似的自定义需求。
最佳的配置方式,应该和spring情况类似,不侵入原有业务。下面提供一种结合 localThread、@annotation、Aspect 的方案。
- 创建一个 ComposeDataSource bean, 实现spring 的 AbstractRoutingDataSource,并exclude spring AutoDatabaseConfiguration。
- 在 ComposeDataSource 初始化方法里,初始化的多数据源,并设置到 DataSourceMap 中,其中key为数据源id,value为数据源实例。
- 执行数据库操作的方法上使用自定义注解,指定数据源id。
- 使用 aspect,具体实现方法使用aspectj或者sping aspect,参考@Async文章,通过id查询数据源,并配置到 localThread。
- 执行数据库操作的方法时,调用 ComposeDataSource 的 getConnect 方法,从localThread获得实际数据源。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。