Mysql 卡拉夫+;pax jdbc连接池已达到限制

Mysql 卡拉夫+;pax jdbc连接池已达到限制,mysql,osgi,apache-karaf,pax,jdbc-pool,Mysql,Osgi,Apache Karaf,Pax,Jdbc Pool,我对karaf中pax jdbc的池连接有一个问题,我正在尝试通过注入一个Mysql数据源(DS) xml到我的项目中,为了测试它,我构建了一个karaf命令,其中将DS注入到karaf命令类中 并使用该连接执行查询。这没关系,但问题是当我多次执行命令时,例如 每次执行都会创建一个新的DS实例,池连接无法打开到MySQL的新连接,因为 游泳池已达到极限 我已将我的代码上传到github的以下链接:,您可以发出拉取请求 如果您在此项目中发现错误 要测试此项目,您可以执行以下操作: 1. Downl

我对karaf中pax jdbc的池连接有一个问题,我正在尝试通过注入一个Mysql数据源(DS) xml到我的项目中,为了测试它,我构建了一个karaf命令,其中将DS注入到karaf命令类中 并使用该连接执行查询。这没关系,但问题是当我多次执行命令时,例如 每次执行都会创建一个新的DS实例,池连接无法打开到MySQL的新连接,因为 游泳池已达到极限

我已将我的代码上传到github的以下链接:,您可以发出拉取请求 如果您在此项目中发现错误

要测试此项目,您可以执行以下操作:

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 connection”,它将冻结karaf的提示,如果您中断 执行您可以获得以下异常:

java.sql.SQLException:无法获取连接,出现常规错误 org.apache.commons.dbcp2.pooligdatasource.getConnection(pooligdatasource.java:146) 在com.twim.OrmCommand.execute(OrmCommand.java:53)中 org.apache.karaf.shell.impl.action.command.ActionCommand.execute(ActionCommand.java:83) 在 org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:67) 在 org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:87) 位于org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480) 在 org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406) 位于org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108) org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)位于 org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)位于 org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94) 在 org.apache.karaf.shell.impl.console.ConsoleSessionImpl.run(ConsoleSessionImpl.java:270) 在java.lang.Thread.run(Thread.java:745)处,由以下原因引起: java.lang.InterruptedException位于 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014) 在 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2048) 在 org.apache.commons.pool2.impl.LinkedBlockingDeque.takeFirst(LinkedBlockingDeque.java:583) 在 org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:442) 在 org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363) 在 org.apache.commons.dbcp2.pooligdatasource.getConnection(pooligdatasource.java:134) ... 还有12个


代码中的问题就在这一行


在这里,您创建了一个连接,但从未关闭它。因此,每次调用都会耗尽池中的水。

代码中的问题就在这一行


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

哇@克里斯蒂安·施耐德,我不敢相信那条线是我的问题,多谢。)哇@克里斯蒂安·施耐德,我不敢相信那条线是我的问题,多谢。)