前言:
现在各位老铁们对“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双机热备