提问者:小点点

karaf pax jdbc连接池已达到极限


我在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个答案

匿名用户

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

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