项目需求,配置多数据源,在网上也是找了很多,但是配置项很多,而且Guns里自带多数据源切面AOP,都没有利用上。打断点看了一下配置,找到了一个解决方案:
- 在database_info表中插入新数据源的信息
- 在需要切换数据源的方法上加上注解 @DataSource(name = “dataSourceBiz”)
@Override
@DataSource(name = "dataSourceBiz")
public List<SysAlarm> getAll() {
System.out.println(DataSourceContextHolder.getDataSourceType());
return this.baseMapper.selectList(null);
}
name的值写在数据库里的db_name字段值
- 结果
主数据源的查询结果:
第二个数据源的查询结果:
输出的是 DataSourceContextHolder.getDataSourceType(),也就是数据源
Guns框架已经写好了多数据源的切换,所以不用我们自己写配置,关于框架本身的配置如下:
1. DataSourceConfig类
项目启动首先会进入DataSourceConfig类中的次方法,配置主数据源,就是application-local.yml或dev.yml中配置的数据库,prefix映射的就是yml里的spring.datasource
然后,创建主数据库实例
数据库一系列操作结束后,会进入以下:
对应的是 MultiSourceExAop类
2. SqlSessionFactoryConfig类
然后进入到此类中,创建主数据库的sqlsessionfactory
初始化主数据源容器以及其他数据源的sqlsessionfactory容器
该方法内的 initBaseSqlSessionFactory方法会调取数据库里的全部数据源,除了yml中配置的主数据源,其他数据都在此方法内完成初始化
3. DataSourceContext类
刚刚说的多数据源切换模板里调用的初始化容器相关方法就在这个类里
4. MultiSourceExAop类
切换数据源的切面,在扫描到 @DataSource注解时触发