【发布时间】:2017-06-12 17:35:02
【问题描述】:
我目前正在开发一个应用程序(其逻辑和代码我无法在此处列出),该应用程序创建一个嵌入式 derby 数据库并使用多个线程与其交互以执行 CRUD 和 SELECT 操作。
假设嵌入式数据库的名称是bar,该数据库的路径是c:\foo\bar
多个线程打开一个他们自己的连接到c:\foo\bar,并针对他们自己的数据库表执行各自的操作。 与数据库的连接由一个装饰器抽象出来,该装饰器还维护上次访问连接的时间。 如果上次访问连接的时间超过特定阈值,则关闭并重新获取数据库连接。 有一个收割线程以预定义的计划间隔运行并执行收割逻辑。作为收获逻辑的一部分,它使用以下关闭 URL:
jdbc:derby:c:\foo\bar;shutdown=true
在 reaper 线程运行后尝试对该数据库执行查询的任何线程都会失败,并出现 Derby 错误 8003,这表明当前没有连接。
在 Derby 嵌入模式下,即使每个线程都打开了自己的连接,也是如此吗?当 reaper 线程运行时,它会关闭整个数据库,并且之前针对该数据库打开的任何连接跨所有线程现在都处于无效或关闭状态?
在此类应用程序中使用嵌入式 derby 的最佳做法是什么?
【问题讨论】:
标签: multithreading jdbc database-connection derby