mybatis配置JDBCPool连接池,废话不说,直接上文。
1.创建一个自己的数据源工厂类实现 org.apache.ibatis.datasource.DataSourceFactory
添加属性
注意属性要用连接池提供的数据源对象:
org.apache.tomcat.jdbc.pool.DataSource dataSource;
Java代码
- /**
- JDBCPOOL的实现类
- *
- @author Frank
- @date 2013-1-5 JDBCPoolDataSourceFactory.java
- */
- public class JDBCPoolDataSourceFactory implements DataSourceFactory {
- private static final String DRIVER_PROPERTY_PREFIX = “driver.”;
9.10. private static final int DRIVER_PROPERTY_PREFIX_LENGTH = DRIVER_PROPERTY_PREFIX.length();
11.12. // 定义数据源 - private DataSource dataSource;
14.15.16.17. /** - 构造器
- */
- public JDBCPoolDataSourceFactory() {
- dataSource = new DataSource();
- }
23.24.25.26. /** - 获取JDBCPOOL数据源
- */
- @Override
- public DataSource getDataSource() {
- return dataSource;
- }
33.34.35.36. /** - 对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);
- }
- }
61.62.63.64. 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”?>
Xml代码
- <!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” />
31.32. </dataSource> - </environment>
- </environments>
- <mappers>
- <mapper resource=”com/shdy/db/sql/User.xml”/>
- </mappers>
- </configuration>
注意: <property name=”driverClassName” value=”oracle.jdbc.driver.OracleDriver”/>