Mysql 卡拉夫+;pax jdbc连接池已达到限制
我对karaf中pax jdbc的池连接有一个问题,我正在尝试通过注入一个Mysql数据源(DS) xml到我的项目中,为了测试它,我构建了一个karaf命令,其中将DS注入到karaf命令类中 并使用该连接执行查询。这没关系,但问题是当我多次执行命令时,例如 每次执行都会创建一个新的DS实例,池连接无法打开到MySQL的新连接,因为 游泳池已达到极限 我已将我的代码上传到github的以下链接:,您可以发出拉取请求 如果您在此项目中发现错误 要测试此项目,您可以执行以下操作: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
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个
代码中的问题就在这一行
在这里,您创建了一个连接,但从未关闭它。因此,每次调用都会耗尽池中的水。代码中的问题就在这一行
在这里,您创建了一个连接,但从未关闭它。所以每次打电话你都会把泳池里的水排干。哇@克里斯蒂安·施耐德,我不敢相信那条线是我的问题,多谢。)哇@克里斯蒂安·施耐德,我不敢相信那条线是我的问题,多谢。)