【问题标题】:Close SQL connection Java Webservice关闭 SQL 连接 Java Webservice
【发布时间】:2010-01-19 15:37:55
【问题描述】:

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

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

谢谢!!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-16
        相关资源
        最近更新 更多