我遇到一个问题,即在很短的时间内经常调用我的Java Servlet会导致"连接太多"我的MariaDB数据库的错误。如果使用DB命令show processlist;
,我会看到许多连接处于休眠状态。这些似乎徘徊了大约一分钟(我没有时间,但他们不会徘徊很长时间,只够我的服务器疯了)。在使用它们之后我非常有条不紊close()
我的联系,但我得到MySQLNonTransientConnectionExceptions
取决于打开了多少个连接以及我尝试打开多少个连接。
我意识到我可以增加开放连接的数量,但是我正在尝试做一些比这更好的事情因为我认为我将需要的连接数总是有一个上限,因为我希望我的应用程序能够快速执行有很多联系。请注意,我现在正在使用超快速选择语句对此进行测试,因此它不像我的查询或代码需要很长时间。我认为我的连接在大约240秒后关闭 - 我通过观察show processlist;
输出确定了这一点。 show variables like "%timeout%";
命令输出wait_timeout
和interactive_timeout
,值为28800.我不确定数学如何在28800(秒?)和240秒之间工作。
我认为我应该做的是使用非持久连接而不是持久连接,但我找不到文档如何在Java中使用MariaDB。下面是我现在用于创建连接的伪代码,我认为该连接是持久的。任何帮助表示赞赏。
private static final
JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static final
DB_PARAMS = "zeroDateTimeBehavior=convertToNull";
public static Connection getConnected() {
try {
Class.forName(JDBC_DRIVER);
final Connection
conn = DriverManager.getConnection(
DB_URL + "/" + DATABASE_NAME + "?" + DB_PARAMS,
USERNAME,
PASSWORD);
return conn;
} catch (lots of exceptions handled) {
return null;
}
}