我想重用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()
对象?
答案 0 :(得分:1)
在App Engine中,前端被认为是为Web请求提供服务,部分设计是能够在实例之间移动,删除或根据需要启动。这意味着当您从Servlet中的另一个方法使用时,您的连接对象可能无效。
作为替代方案,您可以使用不需要设置连接或Google Cloud SQL的数据存储
另一方面,如果您需要这么多来使用自己的MySQL,您可以在模块[1]中保持连接活动,这可能比前端请求更长。作为示例,您可以将任务添加到拉取队列,并且模块将从中消耗nexts任务,同时保持连接。
在这种情况下,响应速度不会与使用数据存储区一样快。
[1] App Engine模块 - https://developers.google.com/appengine/docs/java/modules/