Apache Derby嵌入式模式和多线程连接管理

时间:2017-06-12 17:35:03

标签: multithreading jdbc database-connection derby

我目前正在开发一个应用程序(我的逻辑和代码,我不能在这里提出)创建一个嵌入式derby数据库,并使用多个线程与它进行交互,以执行CRUD和SELECT操作。

假设嵌入式数据库的名称为 bar ,此数据库的路径为 c:\ foo \ bar

多个线程打开自己的连接 c:\ foo \ bar ,并对数据库中自己的表执行各自的操作。 与数据库的连接由装饰器抽象出来,装饰器也维护上次访问连接的时间。 如果上次访问连接超过特定阈值,则关闭并重新获取数据库连接。 有一个收割机线程以预定义的预定时间间隔运行并执行收割逻辑。作为收割逻辑的一部分,它使用以下关闭URL:

jdbc:derby:c:\foo\bar;shutdown=true

任何在收割者线程运行后尝试对此数据库执行查询的线程都会因Derby错误 8003 而失败,这表示当前没有连接。

即使每个线程都打开了它自己的连接,它也是在Derby嵌入模式中;当收割者线程运行时,它会关闭整个数据库,之前针对此数据库跨所有线程打开的所有连接现在都处于无效或关闭状态?

在此类应用程序中使用嵌入式德比的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

Derby JDBC Connection URL上的shutdown=true属性不会关闭连接,它会关闭数据库

请参阅:http://db.apache.org/derby/docs/10.13/ref/rrefattrib16471.html

如果您只想关闭连接,请致电Connection.close()