我正在使用带有云sql的应用引擎,
最近我通过此消息在我的app-engine错误日志中加了一脚
java.sql.SQLException: Too many connections at com.google.cloud.sql.jdbc.internal.E...
我在这里看到了许多相关的问题,但没有一个给出具体的解决方案。 我在我的应用程序中完成了一个简单的servlet智能池,如下所示,我想实现一个比这更好的解决方案
private java.sql.Connection con = null;
@Override
public void init() throws ServletException {
con = new DbTransaction().getConnection();
}
public void doProcess(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
// Doing my task here
}
@Override
public void destroy() {
try {
con.close();
} catch (SQLException e) {
Logger.getLogger(ReceiveFeedDetails.class.getName()).log(
Level.SEVERE,
"SQL Ex con.close>> Connection Object:" + con, e);
} catch (Exception e) {
Logger.getLogger(ReceiveFeedDetails.class.getName()).log(
Level.SEVERE,
"Exception con.close>> Connection Object:" + con, e);
}
}
这是我的连接方法
public Connection getConnection() {
Connection con = null;
try {
DriverManager.registerDriver(new AppEngineDriver());
} catch (SQLException e1) {
Logger.getLogger(ReceiveSignupDetails.class.getName()).log(
Level.SEVERE, null, e1);
// e1.printStackTrace();
}
try {
con = DriverManager.getConnection(Configuration.CLOUD_SQL_INSTANCE);
} catch (SQLException e) {
Logger.getLogger(ReceiveSignupDetails.class.getName()).log(
Level.SEVERE, null, e);
}
return con;
}
我的代码中是否有任何问题..
如何改善连接池...
请分享您的想法,如果有任何更好的连接池样本可用,
任何链接或示例代码请帮助......
答案 0 :(得分:1)
我认为你需要使用debug / profile代码来查找创建了多少连接。 如您所示,我发现您希望为每个servlet创建一个连接。 - 你有多少个servlet? - 同时运行多少个appengine实例
连接数= servlets *正在运行的实例 它必须是<< 250