我正在用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服务可以再次工作。
有人知道如何绕过这个问题吗?
谢谢!
答案 0 :(得分:0)
我认为你应该维护一个数据库连接池。例如,您可以参考C3P0。这样,在初始化类时,在构造函数中,您可以设置数据库连接池(例如,与数据库的10个连接)。在insertIntoDB方法中,首先从连接池获取连接,执行数据库CRUD操作,最后返回与池的连接。这样,您就不会通过创建多个连接来对数据库施加压力。 每次调用创建连接也会使它变慢,而threr就是这个名为Connection Thrashing的反模式。
答案 1 :(得分:0)
我必须在glassfish上创建一个连接池,然后每次我需要在我的程序中建立连接时,我'得到'一个连接并立即释放它。我不再在构造函数中获得连接,只是在我的函数内部。