多数据源

# 多数据源

# 简言

基于MybatisPlus多数据源基础上,封装的。

默认以数据库提供多数据源为主。可自行替换。

# 使用方式

# 一、依赖引入

     <dependency>
                <groupId>cn.lovecyy</groupId>
                <artifactId>relaxed-dynamic-datasource</artifactId>
                <version>${revision}</version>
     </dependency>

# 二、配置文件

application.yml

spring:
  datasource:
    url: jdbc:mysql://ip:3306/national_stamp_uat?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password:  
    #查询数据sql
    queryDsSql: SELECT * FROM `t_data_source`
    #结果集映射数据库对应key名称 默认name
    rsk:
      name: db_name

# 三、使用方式

详细使用参考:https://baomidou.com/pages/a61e1b/#%E6%96%87%E6%A1%A3-documentation

# 1.使用**@DS** 切换数据源

@DS 可以注解在方法上或类上,同时存在就近原则 方法上注解 优先于 类上注解

注解 结果
没有@DS 默认数据源
@DS("dsName") dsName可以为组名也可以为具体某个库的名称
@Service
@DS("slave")
public class UserServiceImpl implements UserService {

  @Autowired
  private JdbcTemplate jdbcTemplate;

  public List selectAll() {
    return  jdbcTemplate.queryForList("select * from user");
  }
  
  @Override
  @DS("slave_1")
  public List selectByCondition() {
    return  jdbcTemplate.queryForList("select * from user where age >10");
  }
}

# 2.使用编程式切换数据源

   DynamicDataSourceContextHolder.push("dbName");
   try {
   //  business...
   }
   finally {
   DynamicDataSourceContextHolder.poll();
   }

# 附: 建表语句

/*DDL 信息*/------------
CREATE TABLE `t_data_source` (
  `data_source_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `db_name` varchar(50) DEFAULT NULL COMMENT '数据源名称',
  `url` varchar(255) DEFAULT NULL COMMENT '数据库连接',
  `username` varchar(50) NOT NULL COMMENT '数据库用户名',
  `password` varchar(100) NOT NULL COMMENT '数据库密码',
  `created_time` datetime DEFAULT NULL COMMENT '创建时间',
  `updated_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`data_source_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COMMENT='数据源'