MyBatis如何配置其他連線池
原文引用:
https://blog.csdn.net/l577125882/article/details/80954780
https://www.cnblogs.com/yixiu868/p/8142986.html
以下以MyBatis引入druid連線池為例,講述MyBatis如何配置其他連線池
MyBatis配置druid連線池
1)引入druid的jar包
<!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.0</version> </dependency>
2)建立配置資料來源及連線池資訊的配置檔案
在resource目錄下建立jdbc.properties
driver=com.mysql.cj.jdbc.Driver //資料庫連線驅動 url=jdbc:mysql://localhost:3306/yonghedb?characterEncoding=utf-8 //資料庫連線url username=root //資料庫連線使用者名稱 password=root //資料庫連線密碼 initialSize=5 //連線池初始化建立連線個數 maxActive=10 //連線池最大連線個數 maxWait=500 //連線池最大連線等待時間
3)建立配置類實現DataSourceFactory
建立一個類實現DataSourceFactory,配置資料庫連線池時,配置的就是該類的全路徑
package com.yyy.config; import com.alibaba.druid.pool.DruidDataSource; import org.apache.ibatis.datasource.DataSourceFactory; import javax.sql.DataSource; import java.util.Properties; public class MyBatisDruidPool implements DataSourceFactory { private Properties properties; @Override public void setProperties(Properties props) { //xml文件會將properties注入進來 this.properties=props; } @Override public DataSource getDataSource() { //建立druid資料來源 DruidDataSource dataSource=new DruidDataSource(); //從配置好的propeities中載入配置 dataSource.setUsername(this.properties.getProperty("username")); dataSource.setPassword(this.properties.getProperty("password")); dataSource.setUrl(this.properties.getProperty("url")); dataSource.setDriverClassName(this.properties.getProperty("driver")); dataSource.setInitialSize(Integer.parseInt(this.properties.getProperty("initialSize")));//設定初始化連線數 dataSource.setMaxActive(Integer.parseInt(this.properties.getProperty("maxActive")));//最大活動連線數 dataSource.setMaxWait(Integer.parseInt(this.properties.getProperty("maxWait")));//設定最大等待時間 //初始化連線 try { dataSource.init(); }catch (Exception e){ e.printStackTrace(); } return dataSource; } }
4)配置MyBatis核心配置檔案
配置MyBatis自己的連線池,只需將dataSource標籤的type屬性,配置為POOLED即可,若想配置druid連線池,只需將dataSource的type屬性配置為上述配置類的全限定類名
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- MyBatis的全域性配置檔案 -->
<configuration >
<properties resource="jdbc.properties"/>
<!-- 1.配置環境,可配置多個環境(比如:develop開發、test測試) -->
<environments default="develop">
<environment id="develop">
<!-- 1.1.配置事務管理方式:JDBC/MANAGED
JDBC:將事務交給JDBC管理(推薦)
MANAGED:自己管理事務
-->
<transactionManager type="JDBC"></transactionManager>
<!-- 1.2.配置資料來源,即連線池 JNDI/POOLED/UNPOOLED
JNDI:已過時
POOLED:使用連線池(推薦)
UNPOOLED:不使用連線池
-->
<dataSource type="com.yyy.config.MyBatisDruidPool">
<!--<dataSource type="POOLED">-->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
<property name="initialSize" value="${initialSize}"/>
<property name="maxActive" value="${maxActive}"/>
<property name="maxWait" value="${maxWait}"/>
</dataSource>
</environment>
</environments>
<!-- 2.匯入Mapper配置檔案,如果mapper檔案有多個,可以通過多個mapper標籤匯入 -->
<mappers>
<mapper resource="empMapper.xml"/>
</mappers>
</configuration>
5)測試結果
針對上述過程的疑問
為什麼配置druid連線池,將dataSource的type屬性配置為配置類的全限定類名就可以了?
可參考最上面引用的第二篇文章(介紹的還是比較詳細的)
在回答上述問題前,先思考以下,MyBatis自己支援的連線池的配置原理(參考引用文章)
資料庫連線主要就是使用DataSource資料來源物件,這個資料來源物件中配置有資料庫的連線資訊例如url,username,password等,還有連線池的資訊例如最大連線數,最大連線時間等。
MyBatis建立資料來源物件一般在MyBatis初始化的時候,MyBatis會根據配置檔案中的dataSourde的type屬性來建立資料來源物件。
MyBatis是通過工廠模式來建立DataSource資料來源物件,
MyBatis是通過定義了抽象的工廠口:org.apache.ibatis.datasource.DataSourceFactory,通過其getDataSource()方法返回資料來源DataSource:
檢視上面建立druid連線池配置類的java程式碼,發現druid的配置類實現的也是這個介面,那麼就應該可以大致回答上述疑問了。
MyBatis建立DataSource後將其放在configuration物件內的environment物件中,供以後使用