在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文件中这样设置,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>

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

<sqlMapConfig>

<!-- Configure a built-in transaction manager. If you're using an
app server, you probably want to use its transaction manager
and a managed datasource -->
<transactionManager type="JDBC" commitRequired="false">
<dataSource type="com.ufinity.ibatis.ProxoolDataSourceFactory">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="driverUrl" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
<property name="alias" value="default"/>
</dataSource>
</transactionManager>

<!-- List the SQL Map XML files. They can be loaded from the
classpath, as they are here (com.domain.data...) -->
<sqlMap resource="com/ufinity/ibatis/User.xml"/>
<!-- List more here...
<sqlMap resource="com/mydomain/data/Order.xml"/>
<sqlMap resource="com/mydomain/data/Documents.xml"/>
-->

</sqlMapConfig>

这样就可以正常使用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类中实现,因此编译是无法通过的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值