当项目中单独使用mybatis时配置数据源需要做如下配置,此处以c3p0为例
第一步:
继承UnpooledDataSourceFactory,继承类返回c3p0的数据源即DataSource的实现类ComboPooledDataSource,如下所示
package com.ss.datasource;
import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0DataSource extends UnpooledDataSourceFactory{
public C3P0DataSource() {
this.dataSource = new ComboPooledDataSource();
}
}
第二步:
c3p0.properties中配置c3p0连接池的参数,并在mybatis的主配置文件中使用c3p0的参数,如下所示:
c3p0.properties
#jdbc基本信息
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://127.0.0.1:3306/bookstore?useUnicode=true&useSSL=true&characterEncoding=UTF-8
c3p0.user=root
c3p0.password=root
#c3p0最基本配置参数为:acquireIncrement、initialPoolSize、maxPoolSize、maxIdleTime、minPoolSize
#配置参照文档:https://www.mchange.com/projects/c3p0/#basic_pool_configuration
#c3p0连接池信息
c3p0.minPoolSize=3
c3p0.maxPoolSize=25
#当连接池中的连接耗尽的时候c3p0一次同时获取的连接数
c3p0.acquireIncrement=3
c3p0.initialPoolSize=7
#定义在从数据库获取新连接失败后重复尝试的次数
c3p0.acquireRetryAttempts=60
#两次连接中间隔时间,单位毫秒
c3p0.acquireRetryDelay=1000
#连接关闭时默认将所有未提交的操作回滚
c3p0.autoCommitOnClose=false
#当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒
c3p0.checkoutTimeout=3000
#每120秒检查所有连接池中的空闲连接。Default: 0
c3p0.idleConnectionTestPeriod=120
#最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0
c3p0.maxIdleTime=60
#如果设为true那么在取得连接的同时将校验连接的有效性。Default: false
c3p0.testConnectionOnCheckin=true
#JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个connection而不是整个连接池。
#所以设置这个参数需要考虑到多方面的因素。如果maxStatements与 maxStatementsPerConnection均为0,则缓存被关闭。默认值为 0
c3p0.maxStatements=300
#定义连接池内单个连接所拥有的最大缓存statements数
c3p0.maxStatementsPerConnection=30
sqlMapConfig.xml(mybatis主配置文件,名字可以自己定义)
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
其中红色标注的
配置mybatis的数据源为c3p0为还可以使用另外一种方式,只需将继承UnpooledDataSourceFactory改为实现UnpooledDataSourceFactory的父接口DataSourceFactory即可,如下所示
package com.ss.datasource;
import java.io.IOException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.ibatis.datasource.DataSourceFactory;
import org.apache.ibatis.io.Resources;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0DataSource implements DataSourceFactory {
@Override
public void setProperties(Properties props) {
try {
props.load(Resources.getResourceAsStream("c3p0.properties"));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public DataSource getDataSource() {
return new ComboPooledDataSource("c3p0.properties");
}
}
红色标注的内容可以省略,任然是C3P0自动装配的概念,mybatis主配置文件的内容不变,使用c3p0作为mybatis的数据源非常好配置!