当前位置: 首页 > 知识库问答 >
问题:

karaf pax jdbc连接池已达到极限

沈琛
2023-03-14

我在karaf中的pax-jdbc的池连接有问题,我试图通过blueprint.xml注入一个MySQL数据源(DS)到我的项目中,为了测试它,我已经建立了一个karaf命令,将DS注入karaf命令类并使用该连接执行查询。这是可以的,但是问题是当我执行命令很多次时,每次执行都会创建一个新的DS实例,并且池连接无法打开到MySQL的新连接,因为池已经达到极限。

我已通过以下链接将代码上传到github:https://github.com/christmo/karaf-pax-jdbc,如果在该项目中发现错误,可以发出请求。

对于测试这个项目,你可以做:

1. Download karaf 4.0.4 or apache-karaf-4.1.0-SNAPSHOT
2. Copy the file karaf-pax-jdbc/etc/org.ops4j.datasource-my-ds.cfg to ${karaf}/etc, this file have the mysql 
   configuration change with your mysql configuration data.
4. Start mysql database engine
3. Start karaf -> cd ${karaf}/bin/; ./karaf
4. Add the repo of this project with this karaf command: feature:repo-add mvn:pax/features/1.0-SNAPSHOT/xml/features
5. Install the feature created for this project: feature:install mysql-test
6. Execute the command for test this problem: mysql-connection, this command only execute "Select 1" in mysql

如果您执行9次此命令“mysql连接”,它将冻结karaf的提示,如果您中断执行,您可以得到以下异常:

JAVAsql。SQLException:无法获取连接,组织出现常规错误。阿帕奇。平民dbcp2。共享数据源。com上的getConnection(pooligdatasource.java:146)。特温。奥姆科曼德。在org上执行(OrmCommand.java:53)。阿帕奇。卡拉夫。壳impl。行动命令行动指挥部。在org上执行(ActionCommand.java:83)。阿帕奇。卡拉夫。壳impl。安慰奥斯基。安全。安全命令。在org上执行(SecuredCommand.java:67)。阿帕奇。卡拉夫。壳impl。安慰奥斯基。安全。安全命令。在org上执行(SecuredCommand.java:87)。阿帕奇。菲利克斯。果戈。运行时。关闭。executeCmd(Closure.java:480)位于org。阿帕奇。菲利克斯。果戈。运行时。关闭。org上的executeStatement(Closure.java:406)。阿帕奇。菲利克斯。果戈。运行时。管在org上运行(Pipe.java:108)。阿帕奇。菲利克斯。果戈。运行时。关闭。在org上执行(Closure.java:182)。阿帕奇。菲利克斯。果戈。运行时。关闭。在org上执行(Closure.java:119)。阿帕奇。菲利克斯。果戈。运行时。CommandSessionImpl。在org上执行(CommandSessionImpl.java:94)。阿帕奇。卡拉夫。壳impl。安慰安慰。在java上运行(ConsoleSessionImpl.java:270)。朗。丝线。运行线程(java:745)。java上的InterruptedException。util。同时发生的锁。AbstractQueuedSynchronizer$ConditionObject。java上的reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014)。util。同时发生的锁。AbstractQueuedSynchronizer$ConditionObject。Wait(AbstractQueuedSynchronizer.java:2048)位于org。阿帕奇。平民池2。impl。LinkedBlockingDeque。takeFirst(LinkedBlockingDeque.java:583)位于org。阿帕奇。平民池2。impl。通用对象池。org上的借款对象(genericopobjectpool.java:442)。阿帕奇。平民池2。impl。通用对象池。org上的借款对象(genericopobjectpool.java:363)。阿帕奇。平民dbcp2。共享数据源。getConnection(PooligDataSource.java:134)。。。还有12个

共有1个答案

南门正业
2023-03-14

代码中的问题在系统中。出来println(“--DS--:”DS.getConnection())

在这里,您创建了一个连接,但从未关闭它。所以每次打电话你都会把泳池里的水排干。

 类似资料:
  • 我有使用hikari池创建连接池的Spring启动应用程序。我们正在使用postgres sql用于db。当我以低qps命中系统时,请求需要大约200毫秒来执行。当部署一个pod并且qps为15时,事情保持良好状态。但是一旦我将qps增加到20,请求就开始需要大约10秒来处理,连接池变空(java.sql.SQLTransientConntion异常:菲尼克斯-连接不可用,请求在30183毫秒后超

  • 使用来自DBCP的BasicDataSource,如果我们执行getConnection()并且在最后一个块中我们关闭连接,它是真的将连接返回到池还是关闭连接。我正在检查的代码片段是这样的 我正在检查BasicDataSource的源代码,并访问了这个包装类以获取连接。 委托对象的类型为java。sql。联系包装器代码调用委托的close方法,该方法将关闭集合,而不是将连接返回到池。这是DBCP的

  • 问题陈述 我们在嵌入式模式下使用H2已有一段时间了。它上面配置了一个连接池。以下是当前池配置: H2配置: *跳过用户名和密码属性。 我们已经通过记录池属性验证了上述配置的有效性。 这个设置的问题是,我们观察到连接池经常(尽管是间歇性的)耗尽,一旦连接池达到最大限制,它就开始为一些查询抛出以下异常。 SqlExceptionHelper.log异常(SqlExceptionHelper.java:

  • 我对连接池有一些疑问。在SQL Server连接池文章中提到的内容类似于“打开新连接时,如果连接字符串与现有池不完全匹配,则会创建一个新池。每个进程、每个应用程序域、每个连接字符串以及使用集成安全性时、每个Windows标识将连接池化。” 现在我有了自己的windows窗体应用程序,它具有SQL连接。 > 所以当我打开应用程序时,SQL连接首次打开,并创建了一个池。所以,如果我关闭应用程序池会被自

  • 作为一个专业的服务端开发工程师,我们必须要对连接池、线程池、内存池等有较深理解,并且有自己熟悉的库函数可以让我们轻松驾驭这些不同的 池子。既然他们都叫某某池,那么他们从基础概念上讲,原理和目的几乎是一样的,那就是 复用。 以连接池做引子,我们说说服务端工程师基础必修课。 从我们应用最多的 HTTP 连接、数据库连接、消息推送、日志存储等,所有点到点之间,都需要花样繁多的各色连接。为了传输数据,我们

  • 连接池是客户端内的一个对象,主要是维持现有节点的连接。理论上来讲,节点只有死节点与活节点。 然而在现实世界中,事情绝不会这么明确。有时候节点是处在 “可能挂了但还未确认” 、 “连接超时但未知原因” 或 “最近挂过但现在可用” 的灰色地带中。而连接池的工作就是管理这些无规则的连接,并为客户端提供最稳定的连接状态。 如果一个连接池找不到一个活节点来发送查询,那么就会返回一个 NoNodesAvail