mybatis配置第三方连接池

mybatis配置JDBCPool连接池,废话不说,直接上文。

1.创建一个自己的数据源工厂类实现 org.apache.ibatis.datasource.DataSourceFactory

  添加属性

  注意属性要用连接池提供的数据源对象

  org.apache.tomcat.jdbc.pool.DataSource dataSource;

/**
 * JDBCPOOL的实现类
 * 
 * @author Frank 
 * @date 2013-1-5 JDBCPoolDataSourceFactory.java
 */
public class JDBCPoolDataSourceFactory implements DataSourceFactory {
    private static final String DRIVER_PROPERTY_PREFIX = "driver.";

    private static final int DRIVER_PROPERTY_PREFIX_LENGTH = DRIVER_PROPERTY_PREFIX.length();

    // 定义数据源
    private DataSource dataSource;



    /**
     * 构造器
     */
    public JDBCPoolDataSourceFactory() {
        dataSource = new DataSource();
    }



    /**
     * 获取JDBCPOOL数据源
     */
    @Override
    public DataSource getDataSource() {
        return dataSource;
    }



    /**
     * 对JDBCPOOL属性值进行设置
     */
    @Override
    public void setProperties(Properties properties) {
        // 设置数据库驱动类名称
        Properties driverProperties = new Properties();
        MetaObject metaDataSource = MetaObject.forObject(dataSource);
        for (Object key : properties.keySet()) {
            String propertyName = ( String ) key;
            if (propertyName.startsWith(DRIVER_PROPERTY_PREFIX)) {
                String value = properties.getProperty(propertyName);
                driverProperties.setProperty(propertyName.substring(DRIVER_PROPERTY_PREFIX_LENGTH), value);
            } else if (metaDataSource.hasSetter(propertyName)) {
                String value = ( String ) properties.get(propertyName);
                Object convertedValue = convertValue(metaDataSource, propertyName, value);
                metaDataSource.setValue(propertyName, convertedValue);
            } else {
                throw new DataSourceException("Unknown DataSource property: " + propertyName);
            }
        }
        if (driverProperties.size() > 0) {
            metaDataSource.setValue("driverProperties", driverProperties);
        }
    }



    private Object convertValue(MetaObject metaDataSource, String propertyName, String value) {
        Object convertedValue = value;
        Class< ? > targetType = metaDataSource.getSetterType(propertyName);
        if (targetType == Integer.class || targetType == int.class) {
            convertedValue = Integer.valueOf(value);
        } else if (targetType == Long.class || targetType == long.class) {
            convertedValue = Long.valueOf(value);
        } else if (targetType == Boolean.class || targetType == boolean.class) {
            convertedValue = Boolean.valueOf(value);
        }
        return convertedValue;
    }

 2.完成mybatis数据源配置文件mybatis-config.xml

 <?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="com.shdy.db.JDBCPoolDataSourceFactory">
                <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
                <property name="url" value="jdbc:oracle:thin:@10.21.17.11:1521:XX"/>
                <property name="username" value="XXXX"/>
                <property name="password" value="XXXX"/>
				<property name="testWhileIdle" value="true" />
				<property name="testOnBorrow" value="true" />
				<property name="testOnReturn" value="false" />
				<property name="validationQuery" value="SELECT 1 FROM SYSIBM.SYSDUMMY1" />
				<property name="validationInterval" value="30000" />
				<property name="timeBetweenEvictionRunsMillis" value="30000" />
				<property name="maxActive" value="50" />
				<property name="maxIdle" value="30" />
				<property name="minIdle" value="10" />
				<property name="maxWait" value="5000" />
				<property name="initialSize" value="5" />
				<property name="removeAbandonedTimeout" value="36000" />
				<property name="removeAbandoned" value="true" />
				<property name="logAbandoned" value="true" />
				<property name="minEvictableIdleTimeMillis" value="30000" />
				<property name="jmxEnabled" value="true" />
				<property name="jdbcInterceptors"
					value="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" />

            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/shdy/db/sql/User.xml"/>
    </mappers>
</configuration>

 注意: <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>

猜你喜欢

转载自heartarea.iteye.com/blog/1766096