关闭SQL连接Java Webservice

时间:2010-01-19 15:37:56

标签: java sql mysql web-services garbage-collection

我正在用Java编写一个WebService来创建和调用这个类:

    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服务后没有立即关闭连接。这意味着对webservice的100次调用创建了100个与数据库的连接。它创建MySQL错误“连接的用户太多”如果我等待2分钟,垃圾收集器会破坏对象,并且web服务可以再次工作。

有人知道如何绕过这个问题吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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