参考:
需求描述
近期被分配了一个需求:
- 在项目里同时连接多个数据源
- 用户可以输入数据库连接信息动态建立连接
JDBC 与 DATASOURCE
在配置动态数据源前,必须先回顾一下jdbc与datasource,这对后面的功能实现有很大帮助
以下是jdbc伪代码
//注册driver
Class.forName("com.mysql.jdbc.Driver");
//建立数据库对象
Connection conn = DriverManager.getConnection(url_encrypt,user,password);
//建立操作对象
Statement stmt= conn.createStatement();
//结果集
ResultSet rs = stmt.executeQuery("select * from information");
//依次关闭结果集,操作对象,数据库对象
if(rs!=null){
rs.close();
}
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
可以看出,使用jdbc的步骤简单归纳如下:
- 加载数据库驱动
driver - 建立数据库连接
connection - 创建
statement - 通过
statement执行sql,获得结果集ResultSet - 依次关闭
ResultSet,statement,connection
但是,每次通过jdbc建立连接不但繁琐,而且频繁建立和释放连接对系统资源消耗也很大,因此发展出了datasource
datasource是个接口,它只有两个方法
//无参数获取Connection
Connection getConnection() throws SQLException;
//通过username和password获取Connection
Connection getConnection(String username, String password) throws SQLException;
可以看出,这两个方法都可以获得connection,因此connection的创建与回收都由datasource管理而不用用户操心,而且通过数据库连接池也避免了connection的频繁创建与销毁,提升了系统性能
那么想要实现动态数据源,思路有两种:
- 同时创建多个
datasource,不同的接口(或方法)采用不同的datasource - 采用动态数据源,根据需要动态提供不同的
connection
mybatis
现在我们已经有了初步思路,下一步就是如何把这个思路应用于mybatis上,这样就需要了解下mybatis与datasource间的关系
我们知道,使用mybatis时,我们做了以下工作:
- 写
mapper接口 - 写
.xml文件 - 通过
@MapperScan指定mapper接口的扫描路径 - 配置
mapper-locations指定.xml文件路径
这中间,mybatis做了很多工作,但这不是我们这篇文章的重点,但我们只需要了解以下内容:
mybatis会根据mapper接口与.xml文件生成mapper接口的实现类- 这个
mapper实现类会使用SqlSessionTemplate去执行SQL命令 - 如果某
mapper想使用某特定数据库,就让它使用某特定的SqlSessionTemplate SqlSessionTemplate可通过SqlSessionFactory去创建SqlSessionFactory通过SqlSessionFactoryBean创建SqlSessionFactoryBean可以通过setDataSource设置datasource,通过setMapperLocations设置.xml文件地址
梳理一下:
- 创建一个
SqlSessionFactoryBean,设置datasource与xml文件路径 - 通过
SqlSessionFactoryBean创建SqlSessionFactory - 通过
SqlSessionFactory创建SqlSessionTemplate - 把这个
SqlSessionTemplate“关联”到mapper接口
ps:以上总结是基于spring+mybatis,如果没有spring,链路如下:
datasource >> Environment >> Configuration >> SqlSessionFactoryBuilder >> SqlSessionFactory >> S

本文介绍了在Java项目中实现多数据源配置及动态切换的需求。首先回顾了JDBC与DataSource的区别,强调了DataSource在连接管理上的优势。接着讨论了MyBatis与DataSource的结合,展示了如何将多数据源配置应用于MyBatis。文章提供了配置文件和数据源的示例,并指出通过动态数据源可以实现数据源的按需切换。最后提到了参考的相关文章链接,供读者深入学习。

365

被折叠的 条评论
为什么被折叠?



