龙空技术网

springboot + mybatisplus 实现 动态切换 多数据源

双主双机热备 475

前言:

现在各位老铁们对“windows配置mysql双机热备”都比较关注,兄弟们都需要分析一些“windows配置mysql双机热备”的相关内容。那么小编同时在网摘上收集了一些有关“windows配置mysql双机热备””的相关资讯,希望各位老铁们能喜欢,兄弟们一起来了解一下吧!

需求阐述:

根据前端入参(例如: conn=MYSQL 或者 conn=ORACLE 等等) 实现动态切换 多数据源 连接不同的数据库 进行 增删查改 等相关操作

实现步骤:

根据前端入参 conn 值 获取 数据库 相关连接信息 如: driver/url/userName/passwd等等根据 数据库连接信息 获取 SqlSessionFactory获取 SqlSession实例化 Mapper执行 增删查改 相关操作

补充:

关于数据库连接信息 和 conn 对应关系 建议 通过配置列表维护

相关代码片段:

@Datapublic class DbDriver {   /**    * 数据库驱动    */   private String driver;   /**    * 数据库连接信息    */   private String conn;   /**    * 用户名    */   private String userName;   /**    * 密码    */   private String passwd;}
@AutowiredSqlSessionFactoryUtil util;@PostMapping("/demo")public Object select(@RequestBody Para para) {   // 1. 以入参 conn 为例 , 需要 工具类 可以获取 对应的 数据库连接信息 如: driver url userName passwd ...   String conn = para.getConn();   // 2. 构建参数   DbDriver dbDriver = buildDbDriver(conn);   // 3. 获取 SqlSession   SqlSession sqlSession = util.getSqlSessionFactory(dbDriver).openSession();   // 4. 实例化 mapper   CustomApiMapper mapper = sqlSession.getMapper(CustomApiMapper.class);   FlowAttachMapper flowAttachMapper = sqlSession.getMapper(FlowAttachMapper.class);   return flowAttachMapper.selectById("9528");   //return mapper.demo();}
private DbDriver buildDbDriver(String conn) {   DbDriver dbDriver = new DbDriver();   // 模拟 构建 参数   if ("MYSQL".equals(code)) {      dbDriver.setDriver("com.mysql.cj.jdbc.Driver");      dbDriver.setConn("jdbc:mysql://x.x.x.x:3306/xxx?characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true");      dbDriver.setUserName("xxx");      dbDriver.setPasswd("xxx");   } else if ("mysql".equals(code)) {      dbDriver.setDriver("com.mysql.cj.jdbc.Driver");      dbDriver.setConn("jdbc:mysql://x.x.x.x:3306/ooo?characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai");      dbDriver.setUserName("ooo");      dbDriver.setPasswd("ooo");   }   return dbDriver;}
@Componentpublic class SqlSessionFactoryUtil {   private static final String ID = "development";   /**    * getSqlSessionFactory    *    * @param dbDriver    * @return    */   public SqlSessionFactory getSqlSessionFactory(DbDriver dbDriver) {      // 连接池      DataSource dataSource = new PooledDataSource(dbDriver.getDriver(), dbDriver.getConn(), dbDriver.getUserName(), dbDriver.getPasswd());      // 事务控制 隔离级别、自动提交等      TransactionFactory transactionFactory = new JdbcTransactionFactory();      // 环境配置 查询特性      Environment environment = new Environment(ID, transactionFactory, dataSource);      // 创建配置      MybatisConfiguration configuration = new MybatisConfiguration(environment);      configuration.setMapUnderscoreToCamelCase(true);      configuration.setCallSettersOnNulls(true);      // 加入资源 Mapper      configuration.addMapper(CustomApiMapper.class);      configuration.addMapper(FlowAttachMapper.class);      return new MybatisSqlSessionFactoryBuilder().build(configuration);   }}

以上实现方式 对于 形如:

XxxService extends com.baomidou.mybatisplus.extension.service.IService // 直接 service 调用 mp 通用接口xxxService.list(wrapper)

直接 通过 service 调用 mybatisplus 提供 通用接口 暂时 没有 比较好的解决方案

希望 各位 大佬 能够 指点迷津

找出实现 需求 最佳方案

标签: #windows配置mysql双机热备