Mybatis-DataSource
Mybatis DataSource
-
Author: HuiFer
-
Description: 该文介绍 mybatis DataSource 源码
-
源码阅读工程: SourceHot-Mybatis
-
org.apache.ibatis.datasource.DataSourceFactory
|
|
类图如下
setProperties
会将下列标签放入datasource
中
|
|
- 在
org.apache.ibatis.session.Configuration
中有配置下面三个信息
|
|
JndiDataSourceFactory
|
|
PooledDataSource
|
|
PooledDataSourceFactory
|
|
UnpooledDataSourceFactory
|
|
UnpooledDataSource
-
org.apache.ibatis.datasource.unpooled.UnpooledDataSource
主要定义数据库连接相关的一些属性,以及与数据库的链接对象创建1 2 3 4 5 6 7 8 9 10
// 一些配置信息 private ClassLoader driverClassLoader; private Properties driverProperties; private String driver; private String url; private String username; private String password; private Boolean autoCommit; private Integer defaultTransactionIsolationLevel; private Integer defaultNetworkTimeout;
-
初始化连接对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/** * 加载链接驱动 如 mysql 链接驱动 * @throws SQLException */ private synchronized void initializeDriver() throws SQLException { if (!registeredDrivers.containsKey(driver)) { Class<?> driverType; try { if (driverClassLoader != null) { driverType = Class.forName(driver, true, driverClassLoader); } else { driverType = Resources.classForName(driver); } // DriverManager requires the driver to be loaded via the system ClassLoader. // http://www.kfu.com/~nsayer/Java/dyn-jdbc.html Driver driverInstance = (Driver) driverType.getDeclaredConstructor().newInstance(); DriverManager.registerDriver(new DriverProxy(driverInstance)); registeredDrivers.put(driver, driverInstance); } catch (Exception e) { throw new SQLException("Error setting driver on UnpooledDataSource. Cause: " + e); } } }
-
设置连接对象的属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/** * 设置连接对象 , 超时时间,是否自动提交事物 * @param conn * @throws SQLException */ private void configureConnection(Connection conn) throws SQLException { if (defaultNetworkTimeout != null) { conn.setNetworkTimeout(Executors.newSingleThreadExecutor(), defaultNetworkTimeout); } if (autoCommit != null && autoCommit != conn.getAutoCommit()) { conn.setAutoCommit(autoCommit); } if (defaultTransactionIsolationLevel != null) { conn.setTransactionIsolation(defaultTransactionIsolationLevel); } }
-
获取连接对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/** * 获取链接对象 * @param username * @param password * @return * @throws SQLException */ private Connection doGetConnection(String username, String password) throws SQLException { Properties props = new Properties(); if (driverProperties != null) { props.putAll(driverProperties); } if (username != null) { props.setProperty("user", username); } if (password != null) { props.setProperty("password", password); } return doGetConnection(props); }
解析流程
- 在 xml 解析的过程中会执行
DataSourceFactory
相关内容
|
|
从类图上或者代码中我们可以发现PooledDataSourceFactory
是继承UnpooledDataSourceFactory
那么方法应该也是UnpooledDataSourceFactory
的。看看设置属性方法
方法直接走完
- 原文作者:知识铺
- 原文链接:https://geek.zshipu.com/post/code/docs/Mybatis/%E6%A0%B8%E5%BF%83%E5%A4%84%E7%90%86%E5%B1%82/Mybatis-DataSource/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com