springboot, mybatis拦截器中,注入datasource获取连接,使用后关闭,导致再之后的sql无法执行,为什么
时间: 2024-05-04 17:19:07 浏览: 171
这种情况可能是因为在拦截器中使用了连接池中的连接,但是没有正确地释放连接导致的。一般情况下,连接池会有一些限制,包括最大连接数、最小空闲连接数等,如果没有正确释放连接,会造成连接池中连接的耗尽,导致后续的SQL无法执行。
为了解决这个问题,可以尝试使用连接池提供的close()方法来释放连接,而不是直接关闭连接。例如,使用Druid连接池时,可以通过以下方式释放连接:
```
public void intercept(Invocation invocation) throws Exception {
Connection conn = null;
try {
//获取连接
conn = dataSource.getConnection();
//执行SQL
invocation.proceed();
} finally {
//释放连接
if (conn != null) {
conn.close();
}
}
}
```
另外,建议在拦截器中使用try-with-resources语句来自动关闭连接,避免忘记关闭连接的情况。例如:
```
public void intercept(Invocation invocation) throws Exception {
try (Connection conn = dataSource.getConnection()) {
//执行SQL
invocation.proceed();
}
}
```
阅读全文