ibatis下加入c3p0连接池的方法
创始人
2024-04-15 20:01:31
0

我看论坛里有两个人写了在iBatis中加入c3p0连接池,我也就不跟着掺合了,做这个ibatis下加入c3p0连接池的方法的原因是没法用spring,又需要连接池,且对DBCP一直观感不加,没法,只好自己动手加入c3p0连接池了。

在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连接池代码还需要朋友们自己斟酌。

【编辑推荐】

  1. ibatis也能用proxool连接池
  2. 实例说明ibatis动态查询
  3. 避免ibatisN+1查询的方法
  4. ibatis级联解决登录系统问题
  5. ibatis标签详解

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...