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主配置文件,名字可以自己定义)

<?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">

<configuration>

    <properties resource="c3p0.properties">

        <property name="maxPoolSize" value="30"/>

    </properties>

    <typeAliases>

        <package name="com.ss.model"/>

    </typeAliases>

    <environments default="dev" >

        <environment id="dev" >

            <transactionManager type="JDBC" />

            <dataSource type="com.ss.datasource.C3P0DataSource" >

                <property name="jdbcUrl" value="${c3p0.jdbcUrl}"/>

                <property name="driverClass" value="${c3p0.driverClass}"/>

                <property name="user" value="${c3p0.user}"/>

                <property name="password" value="${c3p0.password}"/>

                <property name="acquireIncrement" value="${c3p0.acquireIncrement}"/>

                <property name="checkoutTimeout" value="${c3p0.checkoutTimeout}"/>

                <property name="idleConnectionTestPeriod" value="${c3p0.idleConnectionTestPeriod}"/>

                <property name="initialPoolSize" value="${c3p0.initialPoolSize}"/>

                <property name="maxIdleTime" value="${c3p0.maxIdleTime}"/>

                <property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>

                <property name="minPoolSize" value="${c3p0.minPoolSize}"/>

                <property name="maxStatements" value="${c3p0.maxStatements}"/>

                <property name="maxStatementsPerConnection" value="${c3p0.maxStatementsPerConnection}"/>

            </dataSource>

        </environment>

    </environments>

    <mappers>

        <mapper resource="com/ss/mapper/BookMapper.xml"/>

    </mappers>

</configuration>

其中红色标注的<property>标签内容可以不用配置,因为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的数据源非常好配置!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值