我正在使用 Spring/JPA 开发一个独立的应用程序,并且我正在尝试正确释放使用的数据库资源。
例如,在使用 tomcat 的 Web 应用程序中,我们关闭服务器,这样,我们让 Tomcat 管理资源。
但是因为我在一个独立的应用程序中,所以我必须注意这一点,我使用Runtime.getRuntime().addShutdownHook来“捕获”关闭事件并调用((ClassPathXmlApplicationContext) context).close(); ,像这样:
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
((ClassPathXmlApplicationContext) context).close();
}
它可以工作,但如果线程正在使用连接,则堆栈跟踪中会出现异常。我想知道是否还有其他选择?也许得到一个打开的交易列表并强制它们回滚?