本文主要是介绍Mybatis-SqlSessionFactory/多数据源,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
下面的代码演示了发送一个HTTP请求到Controller,如果key=“dev”,则查询dev数据库,否则查询默认的数据库
@Resourceprivate SqlSessionFactory sqlSessionFactory;@Resourceprivate DataSource defaultDataSource;@Resourceprivate XXXMapper xxxMapper;@PostMapping("test")public Object test(@RequestParam("key") String key) {if (key.equals("dev")) {HikariDataSource devDataSource= new HikariDataSource();devDataSource.setJdbcUrl("jdbc:mysql://123.456.789:3306/数据库名?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true");devDataSource.setUsername("帐号");devDataSource.setPassword("密码");Environment environment = new Environment.Builder("dev").dataSource(devDataSource).transactionFactory(new JdbcTransactionFactory()).build();sqlSessionFactory.getConfiguration().setEnvironment(environment);} else {Environment environment = new Environment.Builder("default").dataSource(defaultDataSource).transactionFactory(new JdbcTransactionFactory()).build();sqlSessionFactory.getConfiguration().setEnvironment(environment);}// 这里执行sqlreturn xxxMapper.xxx方法();}
好了,文章到此结束,但是实际开发中,你需要对这段代码进行下面的优化
1.本文是全局修改数据源,如果是那种主从的系统(insert主库,select从库),则需要使用多个SqlSessionFactory
2.毕竟我是以硬编码的方式切换的数据源,每次切换,我都new了一个Environment ,实际开发中,一般都是通过ThreadLocal或者注解的方式,切换数据源
下面两个内容也是需要记住的:
1.Mybatis的SqlSessionFactory或者SqlSessionTemplate是一直持有DataSource引用的,所以直接修改这两个对象的DataSource即可
2.没必要写各种注解,各种@Bean的方式
如果想深入了解Spring对多数据源的支持,可查看AbstractRoutingDataSource,或许对你也有所启发
这篇关于Mybatis-SqlSessionFactory/多数据源的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!