使用springAutoDatabaseConfiguration可以自动配置数据源。但是,如果项目需要同时使用多个数据源,spring原生的配置方式无法满足。Spring提供了AbstractRoutingDataSource,可以自定义数据源来解决类似的自定义需求。在不侵入原有业务的情况下,最好的配置方式应该和spring类似。下面提供结合localThread、@annotation、Aspect的方案。创建一个ComposeDataSourcebean,实现spring的AbstractRoutingDataSource,排除springAutoDatabaseConfiguration。在ComposeDataSource初始化方法中,初始化多个数据源并设置在DataSourceMap中,其中key为数据源id,value为数据源实例。在执行数据库操作的方法上使用自定义注释来指定数据源id。使用aspect,具体实现方法使用aspectj或者spingaspect,参考@Async文章,通过id查询数据源,配置到localThread。在执行数据库操作方法时,调用ComposeDataSource的getConnect方法从localThread获取实际数据源。
