mybatis设置数据源为c3p0

当项目中单独使用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">

    

        

    

    

        

    

    

        

            

            

                

                

                

                

                

                

                

                

                

                

                

                

                

            

        

    

    

        

    

其中红色标注的标签内容可以不用配置,因为c3p0在new ComboPooledDataSource时会去自动加载名为c3p0.properties的配置文件,该文件中所有c3p0的配置都以c3p0.为前缀即可。

配置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的数据源非常好配置!

 

你可能感兴趣的:(mybatis)