首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于数据库连接池,有没有不是tomcat版的啊该怎么解决

2012-01-26 
关于数据库连接池,有没有不是tomcat版的啊?做一个单机的应用程序,需要频繁地读取数据库中数据,想到了用数

关于数据库连接池,有没有不是tomcat版的啊?
做一个单机的应用程序,需要频繁地读取数据库中数据,想到了用数据库连接池。在网上找了找,几乎全是JSP,tomcat相关的,有没有单机版的啊?该怎么配置?怎么处理?望路过的各位老师指点~~开发环境:netbeans,数据库:mysql

[解决办法]
ssh去掉struts 都可以用在c/s 或应用项目里,连接池更是如此。
[解决办法]
dbcp,c3p0,bonecp都是可以单独用的
[解决办法]

探讨
引用:

引用:

dbcp,c3p0,bonecp都是可以单独用的
恩,proxool 也不错的说。


proxool 可以解决mysql的8小时自动挂断问题

[解决办法]
C3P0连接池封装类
用了spring做生命周期控制,不需要的话,删掉spring的引用和注解

PS:代码太长,请自己把下面2个帖子合并一下

Java code
package org.sol.util.c3p0;import java.sql.Connection;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.springframework.stereotype.Repository;import com.mchange.v2.c3p0.ComboPooledDataSource;import com.mchange.v2.c3p0.DataSources;@Repositorypublic class C3p0Source {    String sourceName;    private  HashMap<String,ComboPooledDataSource> dataMap = new HashMap<String,ComboPooledDataSource>();//用来存放数据源    private  String[] ips,                    //数据库所在服务器的ip地址                      users,                   //数据库用户名                      passwords,               //数据库密码                       databases,               //所有数据源                       databaseNames,           //所有数据源的名字                        dbdrivers;                //数据源所用的驱动//    private static C3p0Source instance;               //生成一个自己的对象 实现单态模式                                   //一个用来存放c3p0数据源的集合    private  ArrayList<String> customDatabaseList;   //存放数源的list集合    private  DynamicProperties config;                           //读取属性文件类    private  int[]      maxpoolsize,                           //最大连接数                         initialpoolsize,               //初始化连接数                         maxidletime,                   //最大空闲时间                         minpoolsize,                   //最小连接数                         acquireincrement,           //一次获取的连接数                         idleconnectiontestperiod;   //多少时间查看一次空闲的连接        private String URL_PROTOCOL;    private String CONSOLE_PROPERTIES;        private static final Log log = LogFactory.getLog(C3p0Source.class);        private boolean bResetFlag = false;        /**     * 构造器     *      */    public C3p0Source(String URL_PROTOCOL,String CONSOLE_PROPERTIES){            setURL_PROTOCOL(URL_PROTOCOL);        try {                 log.info("加载dataConnection...");              config = new DynamicProperties(CONSOLE_PROPERTIES);                ips = config.getProperty("ips").split(",");                users = config.getProperty("users").split(",");                passwords = config.getProperty("passwords").split(",");                databases = config.getProperty("databases").split(",");                databaseNames = config.getProperty("databasenames").split(",");                dbdrivers = config.getProperty("dbDrivers").split(",");                maxpoolsize = parseStringToIntArray(config                        .getProperty("maxpoolsize"));                initialpoolsize = parseStringToIntArray(config                        .getProperty("initialpool"));                maxidletime = parseStringToIntArray(config                        .getProperty("maxidletime"));                minpoolsize = parseStringToIntArray(config                        .getProperty("minpoolsize"));                acquireincrement = parseStringToIntArray(config                        .getProperty("acquireincrement"));                idleconnectiontestperiod = parseStringToIntArray(config                        .getProperty("idleconnectiontestperiod"));              build();              customDatabaseList = new ArrayList<String>();                          } catch (Exception e) {                e.printStackTrace();              //数据库配置文件出错              log.info("数据库加载配置文件出错");              System.exit(1);            }    }    public C3p0Source() {        this("jdbc:sqlserver://","/console.properties");    }        /**     * 方法     *     * 将字符串转换为整型数组     */    private int[] parseStringToIntArray(String  temp){        String [] tempString=temp.split(",");        int[] tempInt=new int[tempString.length];        for(int i=0;i<tempString.length;i++){            tempInt[i]=Integer.parseInt(tempString[i]);        }        return tempInt;    }    /**     * 方法     *     * 对数据库连接池进行配置并返回出一个连接池     */    public ComboPooledDataSource setupComboPooledDataSource(String connectURI, String user, String password            ,int maxpoolsize,int initialpoolsize,int maxidletime,int minpoolsize,int acquireincrement            ,int idleconnectiontestperiod,String dbdriver) {        ComboPooledDataSource ds=new ComboPooledDataSource();        try{            //ds.setDriverClass("com.microsoft.jdbc.sqlserver.SQLServerDriver");            if("sqlserver".equals(dbdriver)){                ds.setDriverClass("com.microsoft.sqlserver.jdbc.SQLServerDriver");            }else if("mysql".equals(dbdriver)){                ds.setDriverClass("com.mysql.jdbc.Driver");            }else if("oracle".equals(dbdriver)){                ds.setDriverClass("oracle.jdbc.driver.OracleDriver");            }else{                ds.setDriverClass("com.microsoft.jdbc.sqlserver.SQLServerDriver");            }            //com.mysql.jdbc.Driver linkUrl = "jdbc:mysql://59.44.60.168:3306/ms_sms";            ds.setJdbcUrl(connectURI);            ds.setUser(user);            ds.setPassword(password);            ds.setPreferredTestQuery("select 1");//定义所有连接测试都执行的测试语句。            if("oracle".equals(dbdriver))                ds.setPreferredTestQuery("select 1 from dual");            ds.setMaxPoolSize(maxpoolsize);                               //连接池中保留的最大连接数。            ds.setInitialPoolSize(initialpoolsize);                       //初始化时获取三个连接            ds.setMaxIdleTime(maxidletime);                               //最大空闲时间,25000秒内未使用则连接被丢弃。若为0则永不丢弃。            ds.setMinPoolSize(minpoolsize);                             // 连接池中保留的最小连接数。            ds.setAcquireIncrement(acquireincrement);                   //当连接池中的连接耗尽的时候c3p0一次同时获取的连接数            ds.setIdleConnectionTestPeriod(idleconnectiontestperiod);  //每60秒检查所有连接池中的空闲连接            ds.setAutoCommitOnClose(true);                               //连接关闭时默认将所有未提交的操作回滚            //ds.setAcquireRetryAttempts(30);                           //定义在从数据库获取新连接失败后重复尝试的次数。            ds.setAcquireRetryDelay(2000);    //两次连接中间隔时间,单位毫秒。              ds.setTestConnectionOnCheckin(true);            ds.setAcquireRetryAttempts(2);            //        获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效//        保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试//        获取连接失败后该数据源将申明已断开并永久关闭。Default: false  breakAfterAcquireFailure            ds.setBreakAfterAcquireFailure(false);            //ds.setBreakAfterAcquireFailure(false);            ds.setNumHelperThreads(10);               // 当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待.单位毫秒,默认为0             ds.setCheckoutTimeout(30000);         }catch(Exception e){            log.info("加载数据源时异常");        }        return ds;  }    /**     * 方法     *     * 在map中加入数据源     */      public  void build() {        try{            for (int i = 0; i < databases.length; i++) {                if("sqlserver".equals(dbdrivers[i])){                    dataMap.put(databaseNames[i], setupComboPooledDataSource(URL_PROTOCOL + ips[i] +                            ";DatabaseName=" + databases[i], users[i], passwords[i],maxpoolsize[0],initialpoolsize[0],maxidletime[0],                            minpoolsize[0],acquireincrement[0],idleconnectiontestperiod[0],dbdrivers[0]));                    log.info("创建的数据连结为:"+URL_PROTOCOL + ips[i] +";DatabaseName=" + databases[i]);                }else if("mysql".equals(dbdrivers[i])){                    dataMap.put(databaseNames[i], setupComboPooledDataSource("jdbc:mysql://" + ips[i] +                            "/" + databases[i], users[i], passwords[i],maxpoolsize[0],initialpoolsize[0],maxidletime[0],                            minpoolsize[0],acquireincrement[0],idleconnectiontestperiod[0],dbdrivers[0]));                    log.info("创建的数据连结为:"+"jdbc:mysql://" + ips[i] +"/" + databases[i]);                }else if("oracle".equals(dbdrivers[i])){                    dataMap.put(databaseNames[i], setupComboPooledDataSource("jdbc:oracle:thin:@" + ips[i] +                            ":" + databases[i], users[i], passwords[i],maxpoolsize[0],initialpoolsize[0],maxidletime[0],                            minpoolsize[0],acquireincrement[0],idleconnectiontestperiod[0],dbdrivers[0]));                    log.info("创建的数据连结为:"+"jdbc:oracle:thin:@" + ips[i] +":" + databases[i]);                }        }        }catch(Exception e){            log.error("创建数据库连接池出错",e);        }      }            /**       * 方法       *       * 提供读取自定义业务数据库时使用 将此数据库连接放入map和list集合中       */        public  void bulid(String databaseName)throws Exception {          if (!dataMap.containsKey(databaseName)) {//当map中不包含databaseName这个键所索引的值时             for(int i =0 ;i<databaseNames.length;i++){                 if(databaseName.equals(databaseNames[i])){                     String url = "";                     if("sqlserver".equals(dbdrivers[i])){                         url = URL_PROTOCOL + ips[i] + ";DatabaseName=" + databaseName;                     }else if("mysql".equals(dbdrivers[i])){                         url = "jdbc:mysql://" + ips[i] + "/" + databaseName;                     }else if("oracle".equals(dbdrivers[i])){                         url = "jdbc:oracle:thin:@" + ips[i] + ":" + databaseName;                     }else{                         url = URL_PROTOCOL + ips[i] + ";DatabaseName=" + databaseName;                     }                                           dataMap.put(databaseName, setupComboPooledDataSource(url, users[i], passwords[i],maxpoolsize[i],initialpoolsize[i],maxidletime[i],                            minpoolsize[i],acquireincrement[i],idleconnectiontestperiod[i],dbdrivers[i]));                     customDatabaseList.add(databaseName);                 }             }          }        } 

热点排行