Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 无法打开新连接,因为现有连接仍在当前线程上-ActiveJDBC_Multithreading_Activejdbc_Javalite - Fatal编程技术网

Multithreading 无法打开新连接,因为现有连接仍在当前线程上-ActiveJDBC

Multithreading 无法打开新连接,因为现有连接仍在当前线程上-ActiveJDBC,multithreading,activejdbc,javalite,Multithreading,Activejdbc,Javalite,我收到此错误无法打开新连接,因为现有连接在一段时间后仍在当前线程上。我认为这个错误是不言自明的。我的代码是: 字符串mySQLUrl=“jdbc:postgresql://”+dataLayer.postgresql\u Host+“/”+dataLayer.postgresql\u数据库 Base.open(“org.postgresql.Driver”、mySQLUrl、dataLayer.getPostgreSQLUser()、dataLayer.getPostgreSQLPassword

我收到此错误
无法打开新连接,因为现有连接在一段时间后仍在当前线程上。我认为这个错误是不言自明的。我的代码是:

字符串mySQLUrl=“jdbc:postgresql://”+dataLayer.postgresql\u Host+“/”+dataLayer.postgresql\u数据库

Base.open(“org.postgresql.Driver”、mySQLUrl、dataLayer.getPostgreSQLUser()、dataLayer.getPostgreSQLPassword())


为了避免这个错误,我想创建一个连接工厂,但是为了完成这个任务,我需要知道如何验证是否有一个连接打开(并且仍然有效)并返回它,否则,创建它。是有什么东西造出来的,还是我应该使用好的旧的试捕器|

如果您遇到此异常,则意味着您在打开新线程时,当前线程上仍有连接。这种类型的代码可能会导致连接泄漏,因此框架会阻止您这样做

此页面:说明模型在当前线程上找到连接

因为您没有为应用程序提供任何上下文,所以我将给您举几个例子

如果这是一个批处理应用程序(独立应用程序),您需要打开一个连接,使用它,然后关闭:

try(DB db = Base.open(...)){

  // your code here
}
这将确保连接已关闭并从当前线程中移除。 如果您使用的是ActiveWeb,则可以使用
DBConnectionFilter
: 与任何web应用程序一样,您会在处理请求之前打开连接(从连接池中拉入),在中使用连接,然后在请求结束时关闭连接(返回池)

如果您不使用ActiveWeb,您可以编写一个简单的Servlet过滤器来执行相同的操作,下面是一个示例: