我看论坛里有两个人写了在iBatis中加入c3p0连接池,我也就不跟着掺合了,做这个ibatis下加入c3p0连接池的方法的原因是没法用spring,又需要连接池,且对DBCP一直观感不加,没法,只好自己动手加入c3p0连接池了。
创新互联自2013年创立以来,先为郯城等服务建站,郯城等地企业,进行企业商务咨询服务。为郯城企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
在iBatis中加入c3p0连接池没啥难技术含量,写个文章备份下。
首先打开iBatis的源码包,找到com.ibatis.sqlmap.engine.datasource包,在里面新建个类,C3p0DataSourceFactory,并实现DataSourceFactory接口,里面的代码是Java代码
private DataSource dataSource;
public DataSource getDataSource() {
return dataSource;
}
public void initialize(Map map) {
C3p0Configuration c3p0 = new C3p0Configuration(map);
dataSource = c3p0.getDataSource();
}
private DataSource dataSource;
public DataSource getDataSource() {
return dataSource;
}
public void initialize(Map map) {
C3p0Configuration c3p0 = new C3p0Configuration(map);
dataSource = c3p0.getDataSource();
}
在ibatis下加入c3p0连接池的下一步是到com.ibatis.common.jdbc包里,新建类C3p0Configuration,里面的代码是。太长了,原来在dbcp那部分里,还有单独加载配置文件的方法,我觉得如果连这个xml都读不了,那别的一样没法读。
Java代码
private static final Probe PROBE = ProbeFactory.getProbe();
private DataSource dataSource;
/**
* Constructor to supply a map of properties
*
* @param properties
* - the map of configuration properties
*/
public C3p0Configuration(Map properties) {
try {
dataSource = legacyC3p0Configuration(properties);
} catch (Exception e) {
throw new RuntimeException(
"Error initializing C3p0DataSourceFactory. Cause: " + e, e);
}
}
/**
* Getter for DataSource
*
* @return The DataSource
*/
public DataSource getDataSource() {
return dataSource;
}
private boolean notEmpty(String s) {
return s != null && s.length() > 0;
}
private boolean notSelfString(String s, String compareStr) {
return !s.equalsIgnoreCase(compareStr);
}
private DataSource legacyC3p0Configuration(Map map) {
ComboPooledDataSource combo = null;
try {
if (map.containsKey("JDBC.Driver")) {
combo = new ComboPooledDataSource();
String driverClass = (String) map.get("JDBC.Driver");
String jdbcUrl = (String) map.get("JDBC.ConnectionURL");
String user = (String) map.get("JDBC.Username");
String password = (String) map.get("JDBC.Password");
Class.forName(driverClass);
combo.setDriverClass(driverClass);
combo.setJdbcUrl(jdbcUrl);
combo.setUser(user);
combo.setPassword(password);
String acquireIncrement = (String) map
.get("Pool.acquireIncrement");
if (notEmpty(acquireIncrement)
&& notSelfString(acquireIncrement, "acquireIncrement"))
combo.setAcquireIncrement(Integer
.parseInt(acquireIncrement));
......................
private static final Probe PROBE = ProbeFactory.getProbe();
private DataSource dataSource;
/**
* Constructor to supply a map of properties
*
* @param properties
* - the map of configuration properties
*/
public C3p0Configuration(Map properties) {
try {
dataSource = legacyC3p0Configuration(properties);
} catch (Exception e) {
throw new RuntimeException(
"Error initializing C3p0DataSourceFactory. Cause: " + e, e);
}
}
/**
* Getter for DataSource
*
* @return The DataSource
*/
public DataSource getDataSource() {
return dataSource;
}
private boolean notEmpty(String s) {
return s != null && s.length() > 0;
}
private boolean notSelfString(String s, String compareStr) {
return !s.equalsIgnoreCase(compareStr);
}
private DataSource legacyC3p0Configuration(Map map) {
ComboPooledDataSource combo = null;
try {
if (map.containsKey("JDBC.Driver")) {
combo = new ComboPooledDataSource();
String driverClass = (String) map.get("JDBC.Driver");
String jdbcUrl = (String) map.get("JDBC.ConnectionURL");
String user = (String) map.get("JDBC.Username");
String password = (String) map.get("JDBC.Password");
Class.forName(driverClass);
combo.setDriverClass(driverClass);
combo.setJdbcUrl(jdbcUrl);
combo.setUser(user);
combo.setPassword(password);
String acquireIncrement = (String) map
.get("Pool.acquireIncrement");
if (notEmpty(acquireIncrement)
&& notSelfString(acquireIncrement, "acquireIncrement"))
combo.setAcquireIncrement(Integer
.parseInt(acquireIncrement));
......................
***在com.ibatis.sqlmap.engine.config包里,找到SqlMapConfiguration,在里面找到,加上C3P0就可以实现在ibatis下加入c3p0连接池了
Java代码
// DATA SOURCE ALIASES
typeHandlerFactory.putTypeAlias("SIMPLE", SimpleDataSourceFactory.class.getName());
typeHandlerFactory.putTypeAlias("DBCP", DbcpDataSourceFactory.class.getName());
typeHandlerFactory.putTypeAlias("C3P0", C3p0DataSourceFactory.class.getName());
typeHandlerFactory.putTypeAlias("JNDI", JndiDataSourceFactory.class.getName());
通过这种手段,可以在ibatis下加入c3p0连接池,但是由于代码太长,在这里就不一一列出了,本文只是提出了一个在ibatis下加入c3p0连接池的思路,具体关于ibatis下加入c3p0连接池代码还需要朋友们自己斟酌。
文章名称:ibatis下加入c3p0连接池的方法
当前网址:http://www.36103.cn/qtweb/news47/15497.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联