连接池的问题?(高手请进,在线等)

时间:2022-01-18 18:40:33
刚开始我为主站配置了连接池,用得很好,现在我新做了个副站,也用连接池,但是问题出来,竟然相互之间有影响,只要我打开副站,主站就连不上数据库。怎么回事?

38 个解决方案

#1


难道连接池没有配好吗?

#2


楼主的问题中的环境不明确呀。应该具体说说环境呀。什么数据库,什么连接池,怎么配置的连接池?tomcat连接池还是开源连接池?

是不是 主站连接池的最小连接数 + 副站连接池的最小连接数 > 数据库连接数了?

#3


主站和副站是同一个工程么?
连接池以何种方式进行访问?(引用内置?外部服务器配置?配置文件配置?)
配置文件加载的是一个还是两个?
你想要的结果是什么?
@(#&%)(@#……%)@#&%)@&%)@#(%&)@#&%)@#&%)@#&%)#@&%)

#4


贴一下你的配置

#5


都在一个应用下面吗?

#6


配置问题

#7


我用的数据库是SQL SERVER2000 
这是连接数据库的类


public class DBConnection {     
     private static String    
             driver="com.microsoft.sqlserver.jdbc.SQLServerDriver",//驱动   
             url = "jdbc:sqlserver://localhost:1433;DatabaseName=wz",//URL   
             Name="sa",//用户名   
             Password="***";//密码   
        
     private static Class driverClass = null;   
     private static ObjectPool connectionPool = null;   
   
     public DBConnection(){          
          }       
        
        
     /**   
      * 初始化数据源   
      */    
     private static synchronized void initDataSource() {            
         if (driverClass == null) {    
             try {    
                 driverClass = Class.forName(driver);    
             } catch (ClassNotFoundException e) {    
                 e.printStackTrace();   
             }    
         }    
     }    
     
     /**   
      * 连接池启动   
      * @throws Exception   
      */    
     public static void StartPool() {   
         //loadProperties();   
         initDataSource();    
         if (connectionPool != null) {    
             ShutdownPool();    
         }     
         try {    
             connectionPool = new GenericObjectPool(null);    
             ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(url, Name, Password);    
             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);                 
         } catch (Exception e) {    
             e.printStackTrace();   
         }    
     }    
    
     /**   
      * 释放连接池   
      */    
     public static void ShutdownPool() {    
         try {    
             PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:");    
             driver.closePool("dbpool");   
         } catch (SQLException e) {    
             e.printStackTrace();   
         }    
     }        
     
     /**   
      * 取得连接池中的连接   
      * @return   
      */    
     public static Connection getConnection() {    
         Connection conn = null;    
         if(connectionPool == null)    
             StartPool();    
         try {    
             conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:dbpool");    
         } catch (SQLException e) {    
             e.printStackTrace();   
         }    
         return conn;    
     }    
        
    /**  
      * 获取连接  
     * getConnection  
      * @param name  
      * @return  
      */  
     public static Connection getConnection(String name){   
        return getConnection();   
     }   
     /**  
      * 释放连接  
      * freeConnection  
      * @param conn  
      */  
     public static void freeConnection(Connection conn){   
         if(conn != null){   
             try {   
                 conn.close();   
             } catch (SQLException e) {                 
                 e.printStackTrace();   
             }   
         }   
     }   
     /**  
      * 释放连接  
      * freeConnection  
      * @param name  
      * @param con  
      */  
     public static void freeConnection (String name,Connection con){   
         freeConnection(con);   
     }   
        
  
   
 }

#8


奇怪的是以前需要配置xml的,可现在不用也能连接数据库,不知道是什么原因?

#9


这个类是别人给我的

#10


只要我打开副站,主站就连不上数据库。


那么,打开主站,副站能用吗?

呵呵!实在看不懂。

你的数据库是远程的吗?不再本地本机上?

#11


两个项目是独立的项目,另外一个连接类也是用了这个类,就是数据库改变了.

#12


引用 10 楼 java2000_net 的回复:
只要我打开副站,主站就连不上数据库。 


那么,打开主站,副站能用吗? 

呵呵!实在看不懂。 

你的数据库是远程的吗?不再本地本机上?

我是发布到服务器上去的,数据库也是在本地连接的,就是我打开主站,可以连接数据库,我打开副站,连接数据库后,我再打开主站,就连不上了。如果我先打开副站,然后再打开主站,还是会发生同样的情况。

#13


两个项目是不是发生了冲突,那冲突在哪呢?

#14


用什么数据库?什么类型连接池?

#15


一个连接池?两个不同的数据库?

#16


你主站和副站部署在一个web容器上面了?

#17


引用 15 楼 laorer 的回复:
一个连接池?两个不同的数据库? 

是同一个连接数据库类,两个不同的数据库,对了,同一个连接数据库类是不是表示同一个连接池呀,如果是这样的话,是不是有冲突呀

#18


引用 16 楼 TRMeister 的回复:
你主站和副站部署在一个web容器上面了? 

#19


你在配置文件中建两个连接,然后分别去读取配置文件,这样应该能解决这个问题吧

#20


首先确定一下数据库可用连接是否足够,还有 看一下每台机器的数据库连接数量 netstat -na 看一下连接至端口1433数量

再确定你的Pool是否正常使用。

#21


不明白,幫頂

#22


两个不同的数据库应该配置两个连接池.楼主用的是什么连接池?怎么也没看到你配置呢?

#23


我觉得是这样的。因为你主站和副站在一个web容器中,而且你使用了一个连接池的类,去连接 两个不同的数据库。你的 包名和类名都一样吧?

当副站启动时,web容器 加载副站的连接池时,因为使用了一样的类名和包名,所以是不是就会把 主站的 连接池给替换,这样主站就连不上了。建议换一下副站连接池的类名?

仅供参考。

#24


ls说的似乎有道理 顶一下

#25



<Context path="/ttkd" docBase="" debug="5" reloadable="true" crossContext="true"> 
<Logger className="org.apache.catalina.logger.FileLogger" 
prefix="localhost_DBTest_log." suffix=".txt" timestamp="true"/> 


<Resource name="JDBC/Server2000" auth="Container" type="javax.sql.DataSource"/> 
<ResourceParams name="JDBC/Server2000"> 

<parameter> 
<name>factory</name> 
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value> 
</parameter> 
<parameter> 
<name>driverClassName</name> 
<value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value> 
</parameter> 
<parameter> 
<name>url</name> 
<value>jdbc:sqlserver://localhost:1433;DatabaseName=wz</value> 

</parameter> 
<parameter> 
<name>username</name> 
<value>sa</value> 
</parameter> 
<parameter> 
<name>password</name> 
<value>*</value> 
</parameter> 
<parameter> 
<name>maxActive</name> 
<value>20000</value> 
</parameter> 
<parameter> 
<name>maxIdle</name> 
<value>10000</value> 
</parameter> 
<parameter> 
<name>maxWait</name> 
<value>60000</value> 
</parameter> 
</ResourceParams> 

</Context>

#26


这就是配置文件,另外我的副站没用配置文件。

#27


该回复于2008-06-13 22:37:33被版主删除

#28


我没有用配置文件也连到了数据库,怎么配置才能让那个配置文件有效呢。

#29


帮顶..学习..

#30


该回复于2008-06-14 09:19:26被版主删除

#31


是不是那个公用类有问题呀,大家帮看看。

#32


我那个数据库连接类是不是有问题呀,我没有配置文件都可以跑。

#33


这个类是别人给我的,是不是这个类的原因呀,好像都不用配置的。

#34


没有哪位高人知道吗?急用呀,江湖救急,大家快帮帮忙呀。

#35


怎么没人理呀,SOS,我今天要加班的呀,各位大哥帮帮忙,我怎么不需要配置文件就能连到数据库呀。这是怎么回事呀。

#36


怎么会有冲突呢。

#37


高人在哪?

#38


一个web服务器下,两个工程(虚拟目录)?
没有试过,那为什么不用web服务器自身的连接池呢?

#1


难道连接池没有配好吗?

#2


楼主的问题中的环境不明确呀。应该具体说说环境呀。什么数据库,什么连接池,怎么配置的连接池?tomcat连接池还是开源连接池?

是不是 主站连接池的最小连接数 + 副站连接池的最小连接数 > 数据库连接数了?

#3


主站和副站是同一个工程么?
连接池以何种方式进行访问?(引用内置?外部服务器配置?配置文件配置?)
配置文件加载的是一个还是两个?
你想要的结果是什么?
@(#&%)(@#……%)@#&%)@&%)@#(%&)@#&%)@#&%)@#&%)#@&%)

#4


贴一下你的配置

#5


都在一个应用下面吗?

#6


配置问题

#7


我用的数据库是SQL SERVER2000 
这是连接数据库的类


public class DBConnection {     
     private static String    
             driver="com.microsoft.sqlserver.jdbc.SQLServerDriver",//驱动   
             url = "jdbc:sqlserver://localhost:1433;DatabaseName=wz",//URL   
             Name="sa",//用户名   
             Password="***";//密码   
        
     private static Class driverClass = null;   
     private static ObjectPool connectionPool = null;   
   
     public DBConnection(){          
          }       
        
        
     /**   
      * 初始化数据源   
      */    
     private static synchronized void initDataSource() {            
         if (driverClass == null) {    
             try {    
                 driverClass = Class.forName(driver);    
             } catch (ClassNotFoundException e) {    
                 e.printStackTrace();   
             }    
         }    
     }    
     
     /**   
      * 连接池启动   
      * @throws Exception   
      */    
     public static void StartPool() {   
         //loadProperties();   
         initDataSource();    
         if (connectionPool != null) {    
             ShutdownPool();    
         }     
         try {    
             connectionPool = new GenericObjectPool(null);    
             ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(url, Name, Password);    
             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);                 
         } catch (Exception e) {    
             e.printStackTrace();   
         }    
     }    
    
     /**   
      * 释放连接池   
      */    
     public static void ShutdownPool() {    
         try {    
             PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:");    
             driver.closePool("dbpool");   
         } catch (SQLException e) {    
             e.printStackTrace();   
         }    
     }        
     
     /**   
      * 取得连接池中的连接   
      * @return   
      */    
     public static Connection getConnection() {    
         Connection conn = null;    
         if(connectionPool == null)    
             StartPool();    
         try {    
             conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:dbpool");    
         } catch (SQLException e) {    
             e.printStackTrace();   
         }    
         return conn;    
     }    
        
    /**  
      * 获取连接  
     * getConnection  
      * @param name  
      * @return  
      */  
     public static Connection getConnection(String name){   
        return getConnection();   
     }   
     /**  
      * 释放连接  
      * freeConnection  
      * @param conn  
      */  
     public static void freeConnection(Connection conn){   
         if(conn != null){   
             try {   
                 conn.close();   
             } catch (SQLException e) {                 
                 e.printStackTrace();   
             }   
         }   
     }   
     /**  
      * 释放连接  
      * freeConnection  
      * @param name  
      * @param con  
      */  
     public static void freeConnection (String name,Connection con){   
         freeConnection(con);   
     }   
        
  
   
 }

#8


奇怪的是以前需要配置xml的,可现在不用也能连接数据库,不知道是什么原因?

#9


这个类是别人给我的

#10


只要我打开副站,主站就连不上数据库。


那么,打开主站,副站能用吗?

呵呵!实在看不懂。

你的数据库是远程的吗?不再本地本机上?

#11


两个项目是独立的项目,另外一个连接类也是用了这个类,就是数据库改变了.

#12


引用 10 楼 java2000_net 的回复:
只要我打开副站,主站就连不上数据库。 


那么,打开主站,副站能用吗? 

呵呵!实在看不懂。 

你的数据库是远程的吗?不再本地本机上?

我是发布到服务器上去的,数据库也是在本地连接的,就是我打开主站,可以连接数据库,我打开副站,连接数据库后,我再打开主站,就连不上了。如果我先打开副站,然后再打开主站,还是会发生同样的情况。

#13


两个项目是不是发生了冲突,那冲突在哪呢?

#14


用什么数据库?什么类型连接池?

#15


一个连接池?两个不同的数据库?

#16


你主站和副站部署在一个web容器上面了?

#17


引用 15 楼 laorer 的回复:
一个连接池?两个不同的数据库? 

是同一个连接数据库类,两个不同的数据库,对了,同一个连接数据库类是不是表示同一个连接池呀,如果是这样的话,是不是有冲突呀

#18


引用 16 楼 TRMeister 的回复:
你主站和副站部署在一个web容器上面了? 

#19


你在配置文件中建两个连接,然后分别去读取配置文件,这样应该能解决这个问题吧

#20


首先确定一下数据库可用连接是否足够,还有 看一下每台机器的数据库连接数量 netstat -na 看一下连接至端口1433数量

再确定你的Pool是否正常使用。

#21


不明白,幫頂

#22


两个不同的数据库应该配置两个连接池.楼主用的是什么连接池?怎么也没看到你配置呢?

#23


我觉得是这样的。因为你主站和副站在一个web容器中,而且你使用了一个连接池的类,去连接 两个不同的数据库。你的 包名和类名都一样吧?

当副站启动时,web容器 加载副站的连接池时,因为使用了一样的类名和包名,所以是不是就会把 主站的 连接池给替换,这样主站就连不上了。建议换一下副站连接池的类名?

仅供参考。

#24


ls说的似乎有道理 顶一下

#25



<Context path="/ttkd" docBase="" debug="5" reloadable="true" crossContext="true"> 
<Logger className="org.apache.catalina.logger.FileLogger" 
prefix="localhost_DBTest_log." suffix=".txt" timestamp="true"/> 


<Resource name="JDBC/Server2000" auth="Container" type="javax.sql.DataSource"/> 
<ResourceParams name="JDBC/Server2000"> 

<parameter> 
<name>factory</name> 
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value> 
</parameter> 
<parameter> 
<name>driverClassName</name> 
<value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value> 
</parameter> 
<parameter> 
<name>url</name> 
<value>jdbc:sqlserver://localhost:1433;DatabaseName=wz</value> 

</parameter> 
<parameter> 
<name>username</name> 
<value>sa</value> 
</parameter> 
<parameter> 
<name>password</name> 
<value>*</value> 
</parameter> 
<parameter> 
<name>maxActive</name> 
<value>20000</value> 
</parameter> 
<parameter> 
<name>maxIdle</name> 
<value>10000</value> 
</parameter> 
<parameter> 
<name>maxWait</name> 
<value>60000</value> 
</parameter> 
</ResourceParams> 

</Context>

#26


这就是配置文件,另外我的副站没用配置文件。

#27


该回复于2008-06-13 22:37:33被版主删除

#28


我没有用配置文件也连到了数据库,怎么配置才能让那个配置文件有效呢。

#29


帮顶..学习..

#30


该回复于2008-06-14 09:19:26被版主删除

#31


是不是那个公用类有问题呀,大家帮看看。

#32


我那个数据库连接类是不是有问题呀,我没有配置文件都可以跑。

#33


这个类是别人给我的,是不是这个类的原因呀,好像都不用配置的。

#34


没有哪位高人知道吗?急用呀,江湖救急,大家快帮帮忙呀。

#35


怎么没人理呀,SOS,我今天要加班的呀,各位大哥帮帮忙,我怎么不需要配置文件就能连到数据库呀。这是怎么回事呀。

#36


怎么会有冲突呢。

#37


高人在哪?

#38


一个web服务器下,两个工程(虚拟目录)?
没有试过,那为什么不用web服务器自身的连接池呢?