如题,在使用虚拟主机的情况下,该如何使用连接池?效率如何?

解决方案 »

  1.   

    占据有利地形--沙发
    呵呵舒舒服服地帮"function_chk()"顶一下
      

  2.   

    能,很多方法
    比如用dbcp,或者写到META-INF中
      

  3.   

    连接池配置并不是只能写在server.xml中的,建议好好看看TOMCAT的自带文档
      

  4.   

    tomcat自带的有一个入口可以添加数据源的,但是要有管理员身份才可以
      

  5.   

    tomcat5.0可以,进入tomcat的admin就行,5.5好象不可以,只能改server.xml
      

  6.   

    用ADMIN不也是修改 server.xml吗只是变成图形化而已  5.5也有ADMIN查件的
      

  7.   

    在不修改TOMCAT下的SERVLET.XML的情况下使用连接池!Proxool
    1、先写一个属性文件:Proxool.properties,放入你的WEB应用程序的WEB-INF\classes下面,内容如下: 
    jdbc-0.proxool.alias=mysql 
    jdbc-0.proxool.driver-class=org.gjt.mm.mysql.Driver 
    jdbc-0.proxool.driver-url=jdbc:mysql://localhost:3306/soft?user=root&password= 
    jdbc-0.proxool.maximum-connection-count=20 
    jdbc-0.proxool.prototype-count=4 
    jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE 
    jdbc-0.proxool.verbose=true 
    jdbc-0.proxool.statistics=10s,1m,1d 
    jdbc-0.proxool.statistics-log-level=DEBUG 2、web.xml如是写: 
    <?xml version="1.0" encoding="ISO-8859-1"?> 
    <!DOCTYPE web-app 
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd"> 
    <web-app> 
    <servlet> 
    <servlet-name>ServletConfigurator</servlet-name> 
    <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class> 
    <init-param> 
    <param-name>propertyFile</param-name> 
    <param-value>WEB-INF/classes/Proxool.properties</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet> 
    <servlet-name>Admin</servlet-name> 
    <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Admin</servlet-name> 
    <url-pattern>/Admin</url-pattern> 
    </servlet-mapping> 
    </web-app> 3、将驱动程序mm.mysql-2.0.14-bin.jar与proxool-0.8.3.jar放入WEB-INF\lib目录下。 
    4、下面是测试的jsp文件: 
    <%@ page import="java.sql.*" %> 
    <%@ page contentType="text/html;charset=GB2312" %> 
    <html> 
    <head> 
    <title>CH14 - Proxool.jsp</title> 
    </head> 
    <body> 
    <h2>使用 Proxool Connection Pool</h2> 
    <% 
    Connection con = null; 
    Statement stmt = null; 
    ResultSet rs = null; 
    try{ 
    con = DriverManager.getConnection("proxool.mysql"); 
    stmt = con.createStatement(); 
    String query = "select * from count_num"; 
    rs = stmt.executeQuery(query); 
    while(rs.next()) { 
    out.print(rs.getLong(1)+"--OK"); 

    stmt.close(); 
    con.close(); 
    }catch(SQLException sqle){ 
    out.println("sqle="+sqle); 

    finally{ 
    try { 
    if(con != null){ 
    con.close(); 

    }catch(SQLException sqle){ 
    out.println("sqle="+sqle); 


    %> 
    </body> 
    </html> 
    5、后台统计与信息 
    请进入:http://127.0.0.1:8080/testpxool/Admin 
    (testpxool应改为你的WEB应用程序名)
      

  8.   

    再发个 DBCP的
    import java.sql.Connection; 
    import java.sql.SQLException; 
    import java.sql.DriverManager; 
    import org.apache.log4j.Logger; 
     
    import org.apache.commons.pool.ObjectPool; 
    import org.apache.commons.pool.impl.GenericObjectPool; 
    import org.apache.commons.dbcp.DriverManagerConnectionFactory; 
    import org.apache.commons.dbcp.ConnectionFactory; 
    import org.apache.commons.dbcp.PoolableConnectionFactory; 
    import org.apache.commons.dbcp.PoolingDriver; 
     
    /** 
     * ?数据库连接缓冲池 
     */ 
    public class DBPool { 
        private final static Logger logger = Logger.getLogger(DBPool.class); 
     
        private static String dbIP = "192.168.0.132"; 
         
        private static String dbJdbc = "jdbc:postgresql://" + dbIP + "/sample"; 
     
        private static String dbUser = "sample"; 
     
        private static String dbPwd = "sample"; 
     
        private static Class driverClass = null; 
     
        private static ObjectPool connectionPool = null; 
     
        public DBPool() { 
        } 
     
        /** 
         * 初始化数据源 
         */ 
        private static synchronized void initDataSource() { 
            //驱动数据源 
            if (driverClass == null) { 
                try { 
                    driverClass = Class.forName("org.postgresql.Driver"); 
                } catch (ClassNotFoundException e) { 
                    logger.error(e.getMessage(), e); 
                } 
            } 
        } 
     
        /** 
         * 连接池启动 
         * @throws Exception 
         */ 
        public static void StartPool() { 
            // 记录连接源的字符串 
            logger.info(dbJdbc); 
     
            // 初始化数据源 
            initDataSource(); 
     
            // 如果连接池为空 
            if (connectionPool != null) { 
                ShutdownPool(); 
            } 
     
            try { 
                connectionPool = new GenericObjectPool(null); 
                ConnectionFactory connectionFactory = new DriverManagerConnectionFactory( 
                        dbJdbc, dbUser, dbPwd); 
                PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory( 
                        connectionFactory, connectionPool, null, null, false, true); 
                Class.forName("org.apache.commons.dbcp.PoolingDriver"); 
                PoolingDriver driver = (PoolingDriver) DriverManager 
                        .getDriver("jdbc:apache:commons:dbcp:"); 
                driver.registerPool("dbpool", connectionPool); 
                 
                logger.info("Init Pool for Database Connection Succees."); 
            } catch (Exception e) { 
                logger.error(e.getMessage(), e); 
            } 
        } 
     
        /** 
         * 释放连接池 
         */ 
        public static void ShutdownPool() { 
            try { 
                PoolingDriver driver = (PoolingDriver) DriverManager 
                        .getDriver("jdbc:apache:commons:dbcp:"); 
                driver.closePool("dbpool"); 
            } catch (SQLException e) { 
                logger.error(e.getMessage(), e); 
            } 
        } 
     
        /** 
         * 打印连接池状态 
         */ 
        public static String GetPoolStats() { 
     
            StringBuffer stat = new StringBuffer(); 
            try { 
                PoolingDriver driver = (PoolingDriver) DriverManager 
                        .getDriver("jdbc:apache:commons:dbcp:"); 
                ObjectPool connectionPool = driver.getConnectionPool("dbpool"); 
                 
                stat.append("-- Active Connection: "); 
                stat.append(connectionPool.getNumActive()); 
                stat.append(" ,"); 
                stat.append("Free Connection: "); 
                stat.append(connectionPool.getNumIdle()); 
                stat.append(" . --"); 
            } catch (Exception e) { 
                logger.error(e.getMessage(), e); 
            } 
            return stat.toString(); 
        } 
     
        /** 
         * 取得连接池中的连接 
         * @return 
         */ 
        public static Connection getDbConnection() { 
            Connection conn = null; 
            if(connectionPool == null) 
                StartPool(); 
            try { 
                conn = DriverManager 
                        .getConnection("jdbc:apache:commons:dbcp:dbpool"); 
            } catch (SQLException e) { 
                logger.error(e.getMessage(), e); 
            } 
            return conn; 
        } 
     
    }
      

  9.   

    楼上的解决方法还差不多,不管在web.xml里怎么设置,你都要知道tomcat的管理员及密码。人家都说了是虚拟主机了,网管肯定也不会提供给你tomcat的用户信息的。
      

  10.   

    用web.xml配置就不用tomcat管理员密码了嘛
    其实<load-on-startup>1</load-on-startup> 是关键。
    就是让你写的那个初始化连接池的那个servlet在应用启动时加载一下而已。
      

  11.   

    楼主的意思大概是想类似这样来配置连接池吧:
    <Resource auth="Container" name="jdbc/jndiname" type="javax.sql.DataSource"/>
      <ResourceParams name="jdbc/jndiname">
        <parameter>
          <name>factory</name>
          <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
        </parameter>
        <parameter>
          <name>maxWait</name>
          <value>-1</value>
        </parameter>
        <parameter>
          <name>maxActive</name>
          <value>2</value>
        </parameter>
        <parameter>
          <name>password</name>
          <value>密码</value>
        </parameter>
        <parameter>
          <name>url</name>
          <value>jdbc:microsoft:sqlserver://数据库ip:1433;databaseName=数据库名;SelectMethod=Cursor</value>
        </parameter>
        <parameter>
          <name>driverClassName</name>
          <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
        </parameter>
        <parameter>
          <name>maxIdle</name>
          <value>2</value>
        </parameter>
        <parameter>
          <name>username</name>
          <value>用户名</value>
        </parameter>
      </ResourceParams>
    这样配置好象写在web.xml中不行,可又没有权限写在站点配置文件中,我也想知道这个问题应如何解决