我从春季开始使用SingleConnectionDataSource
编写了简单的测试:
public void checkDataSourceHealth() throws SQLException {
SingleConnectionDataSource ds = new SingleConnectionDataSource();
ds.setUrl("jdbc:mysql://localhost:3306/default");
ds.setUsername("sys");
ds.setPassword("qwerty");
ds.setDriverClassName("com.mysql.cj.jdbc.Driver")
try (Connection connection = dataSource.getConnection()) {
try (Statement statement = connection.createStatement()) {
statement.setQueryTimeout(2);
statement.execute("SELECT SLEEP(3)"); //just for test. Will be 'SELECT 1'
}
} catch (MySQLTimeoutException ex) {
//data base is BUSY
} catch (Exception e) {
log.warn("Check dataSource health failed");
throw e;
} finally {
dataSource.destroy();
}
}
我只想检查我的请求是否已完成2秒钟以上,请将状态设置为“忙”。它可以正常工作,但是在此之后,我检查了show processlist;
,看到了实时连接:
但是为什么呢?执行此查询后,我关闭了所有程序。为什么连接还活着?