在ibatis中使用proxool数据源

ibatis本身并不支持proxool的数据源连接,我们可以通过几种方法实现。
第一:采用spring将ibatis与proxool进行整合,利用spring将proxool数据源注入到sqlmapclient中去,具体配置可在网上找spring+ibatis整合的例子。
我所要说的是采用第二种方式,不依赖spring完全独立,首先我们要自定义一个DataSourceFactory类,这个类必须实现com.ibatis.sqlmap.engine.datasource.DataSourceFactory接口
代码如下:

package com.wang.ibatis;

import java.util.Map;

import javax.sql.DataSource;

import org.logicalcobwebs.proxool.ProxoolDataSource;

import com.ibatis.sqlmap.engine.datasource.DataSourceFactory;

public class ProxoolDataSourceFactory implements DataSourceFactory {

/**
* 使用ProxoolDataSource数据源
*/
private ProxoolDataSource dataSource;
@Override
public DataSource getDataSource() {
return dataSource;
}

/**
* 此方法中实现对ProxoolDataSource类中相关属性的设置
*/
@Override
public void initialize(Map map) {
dataSource = new ProxoolDataSource();
dataSource.setDriver((String)map.get("driver"));
dataSource.setDriverUrl((String)map.get("driverUrl"));
dataSource.setUser((String)map.get("user"));
dataSource.setPassword((String)map.get("password"));
dataSource.setAlias("alias");

}
}

然后在sqlMapConfig.xml文件中这样设置,代码如下:



PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">




















这样就可以正常使用proxool的数据源了。
不过在proxool-0.9.1版本以下有个问题,就必须要把数据用名与密码写到数据库连接URL里面去,这在proxool-0.9.0RC3及以下的版本中的一个BUG,不过在0.9.1的版本中已经修正过来,而0.9.1的版本又有很大家不适应的地方(具体有哪些,我没测试,网上看到的),要想使用0.9.0RC3版本又不想将用户名与密码加入URL中去,我们必须修改源码org.logicalcobwebs.proxool.ProxoolDataSource的registerPool方法,很简单,只需要将cpd.setUser(getUser())与cpd.setPassword(getPassword())两方法放到cpd.setDelegateProperties(delegateProperties)方法后面就可以了,这点在0.9.1的源码中作者有说明。
修改完,请使用jdk1.5进行重新编译, 1.6的javax.sql.DataSource接口继承了java.sql.Wrapper这个只有1.6版本的jdk才有的接口,而此接口的方法并未在ProxoolDataSource类中实现,因此编译是无法通过的。

你可能感兴趣的:(在ibatis中使用proxool数据源)