有没有办法在Java App Engine中重用MySQL Db连接

时间:2014-09-01 11:50:08

标签: java sql google-app-engine connection

我想重用java.sql.Connection对象。它与谷歌应用引擎,所以连接池不是一个选项(我认为?)。通常我只是为每个servlet调用创建一个新连接,但现在我从servlet调用了函数,并且我不想在每个函数调用上创建一个新连接(除非我知道它会非常快),例如

    public void someServlet() { // Called from web page - speed is thus of concern
        try (Connection con = DriverManager.getConnection("connection string")) { // might be slow - want to re-use con
            // Do something with connection, e.g. run some queries
            someSQLFunction();
            someSQLFunction();
            someSQLFunction();
        } catch (SQLException e) {
            // Some error handling
        }
    }

    public void someSQLFunction() throws SQLException {
        // I don't want to re-create another Connection here, but use the one from the servlet.
        try (Connection con = DriverManager.getConnection("connection string")) { // might be slow - want to re-use con
            // Do something with connection, e.g. run some queries
            return;
        }
    }

如何在Connection中重用servlet的someSQLFunction()对象?

1 个答案:

答案 0 :(得分:1)

在App Engine中,前端被认为是为Web请求提供服务,部分设计是能够在实例之间移动,删除或根据需要启动。这意味着当您从Servlet中的另一个方法使用时,您的连接对象可能无效。

作为替代方案,您可以使用不需要设置连接或Google Cloud SQL的数据存储

另一方面,如果您需要这么多来使用自己的MySQL,您可以在模块[1]中保持连接活动,这可能比前端请求更长。作为示例,您可以将任务添加到拉取队列,并且模块将从中消耗nexts任务,同时保持连接。

在这种情况下,响应速度不会与使用数据存储区一样快。

[1] App Engine模块 - https://developers.google.com/appengine/docs/java/modules/