现有系统是 sqlserver2k + resin 用odbc和jdbc连接的,系统使用人数大概在4~5百人左右,平时在线也是这么多,现在想用连接池来做,首次用连接池做有哪些地方要注意的还不是很清楚,请专家给出好的方案和建议,分数不够明天在加,回答的好分加倍!

解决方案 »

  1.   

    我都是一直用c3p0的,不过也有人说c3p0性能不好,建议用proxool。
    tomcat默认是commons-dbcp,据说低版本性能也有问题。不知道resin默认实现的dataSource用的是什么库了。其实用连接池很简单,配置上dataSource,从里边直接取Connection,用完就关。
    把之前所有的getConnection()部分换成dataSource就好了。至于如何调优就是门学问了,要根据自己的情况配置最大链接,最小链接什么的。
      

  2.   

    用JNDI还是自己写一个ConnectionPool 两者之间有什么优缺点
      

  3.   

    数据库服务器根本吃不消这个和你用数据源有关系吗?? 呵呵呵!去优化你的数据库结构(注意索引)和SQL语句去吧!JDBC是性能最高的。但是不能每次都新建一个哦!
    如果你的性能瓶颈确实在建立数据库连接这一步,那么快使用数据源吧,任何一个都可以,先看看效果!我一直用DBCP 没发现大问题,cp 也不错,无所谓的。
      

  4.   

    用proxool 是不是在写一个封装类来封装他来进行有效的管理?
      

  5.   

    可以封装成一个 ConnectionFactory 里面放个静态方法 getConnection,以后就在 DAO 中调用:Connection con = ConnectionFactory.getConnection();这样可以把连接放在一个类中管理,而 getConnection 是使用连接池产生的连接。
    下面这个是用 C3P0 的,仅供参考。import java.beans.PropertyVetoException;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.logging.Level;
    import java.util.logging.Logger;import com.bao.config.Config;
    import com.mchange.v2.c3p0.ComboPooledDataSource;/**
     * C3P0连接池,数据库连接工厂
     */
    public class ConnectionFactory {    private ConnectionFactory(){
        }        private static ComboPooledDataSource ds = null;    static {
            try {
                Logger log = Logger.getLogger("com.mchange");
                log.setLevel(Level.WARNING);
                ds = new ComboPooledDataSource();
                // 设置JDBC的Driver类
                  ds.setDriverClass(Config.getDriverClass());
                // 设置JDBC的URL
                ds.setJdbcUrl(Config.getJdbcUrl());
                // 设置数据库的登录用户名
                  ds.setUser(Config.getDatabaseUsername());
                // 设置数据库的登录用户密码
                  ds.setPassword(Config.getDatabasePassword());
                // 设置连接池的最大连接数
                  ds.setMaxPoolSize(Config.getMaxPoolSize());
                // 设置连接池的最小连接数
                  ds.setMinPoolSize(Config.getMinPoolSize());
        // 设置连接的失效时间(秒)
                  ds.setMaxIdleTime(Config.getMaxIdleTime());
            } catch (PropertyVetoException e) {
                e.printStackTrace();
            }
        }
      
        public static Connection getConnection() {
            Connection con = null;
            try {
                con = ds.getConnection();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            return con;
        }
        // C3P0 end
    }
      

  6.   

    若早用hibernate 估计会好些 
    配置多点查询缓存就好了目前连接池是一方面 会很有效对于你的系统另外可以手动写些缓存 辅助性
      

  7.   

    !学习了!8楼大哥:import com.bao.config.Config;
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    这是什么类?哪可下载的还是自己写的?
      

  8.   

    连接池 随便一个就可以
    我们的系统用的就是commons-dbcp
    没问题的你要考虑优化你们的数据库的 
      

  9.   


    tomcat-5.5.17\conf\Catalina\localhost下的 工程.xml文件
    <?xml version="1.0" encoding="UTF-8"?>
    <Context>
      <Resource
        name="myconnection"
        type="javax.sql.DataSource"
        password="oa"
        driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
        maxIdle="2"
        maxWait="5000"
        username="sa"
        url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=oadb"
        maxActive="4"/>
    </Context>
      

  10.   

    其實jdbc建立了索引查詢的話不比連接池慢的
    不過關鍵是你要用的好
    我用的就很差