2010-01-19 111 views
1

我编程在Java中一个WebService创建和调用这个类:关闭SQL连接的Java web服务

public class Manager{ 

     private Connection aConnection; 


     public CacheManager(){ 
      //We get a connection 
       aConnection = java.sql.DriverManager.getConnection("jdbc:mysql://localhost/mydb?user=root&password="; 


     } 
// Insert a datalist into a table 
    public void insertIntoDB(List listData, String tableName, StringData previousData) 
    { 

     // Some code using database 

     } 

的主要问题是,web服务的调用之后的连接不会关闭。这意味着对Web服务的100个调用会创建100个到数据库的连接。它会创建MySQL错误“连接的用户过多”如果等待2分钟,则垃圾收集器将销毁对象,并且Web服务可以再次工作。

有人有关于如何绕过这个问题的想法吗?

谢谢!

回答

0

我必须在glassfish上创建一个连接池,然后每当我需要连接到我的程序中时,我就会'建立一个连接,然后立即释放它。我不再在构造函数中获得连接,只是在我的函数中。

0

我认为你应该维护一个数据库连接池。例如,您可以参考C3P0。这样,当你初始化这个类时,在构造函数中,你可以设置数据库连接池(比如10个到数据库的连接)。在insertIntoDB方法中,首先从连接池中获取连接,执行数据库CRUD操作,最后将连接返回到池。通过这种方式,您不会通过创建多个连接来对数据库施加压力。 每次调用创建连接也会使其更慢,threr是Connection Thrashing上的反模式。