如何检查是否使用连接池

问题描述:

我在OSGI框架(Felix)上使用HSQLDB + EclipseLink + Gemini。尽管我已经在persistence.xml中设置了池,但我有严重的可疑连接池未被使用,并且每个请求都会创建一个新的连接。如何使用连接池来检查HSQLDB端。如何检查是否使用连接池

编辑1
我开始与-Dhsqldb.reconfig_logging=false应用。要启动HSQLDB服务器在我的应用程序使用下面的代码

p.setProperty("server.database.0", "file:"+dataBasePath); 
p.setProperty("server.dbname.0", "testdb"); 
p.setProperty("server.port", "9001"); 
server = new Server(); 

这是我的JDBC URL:

jdbc:hsqldb:hsql://localhost:9001/testdb;hsqldb.write_delay=false;hsqldb.sqllog=3;hsqldb.applog=3;server.silent=false 

然而,在我的日志我还没有得到关于使用连接池的任何消息。这是我的日志:

2017-04-14 11:01:57,373 | INFO | Server @48b135ed | org.hsqldb.lib.FrameworkLogger | open start - state modified 
2017-04-14 11:01:57,396 | INFO | Server @48b135ed | org.hsqldb.lib.FrameworkLogger | dataFileCache open start 
2017-04-14 11:01:57,407 | INFO | Server @48b135ed | org.hsqldb.lib.FrameworkLogger | dataFileCache open end 
2017-04-14 11:01:57,698 | INFO | Server @48b135ed | org.hsqldb.lib.FrameworkLogger | checkpointClose start 
2017-04-14 11:01:57,699 | INFO | Server @48b135ed | org.hsqldb.lib.FrameworkLogger | checkpointClose synched 
2017-04-14 11:01:57,825 | INFO | Server @48b135ed | org.hsqldb.lib.FrameworkLogger | checkpointClose script done 
2017-04-14 11:01:57,826 | INFO | Server @48b135ed | org.hsqldb.lib.FrameworkLogger | dataFileCache commit start 
2017-04-14 11:01:57,859 | TRACE | Server @48b135ed | org.hsqldb.lib.FrameworkLogger | file sync end 
2017-04-14 11:01:57,859 | INFO | Server @48b135ed | org.hsqldb.lib.FrameworkLogger | dataFileCache commit end 
2017-04-14 11:01:57,934 | INFO | Server @48b135ed | org.hsqldb.lib.FrameworkLogger | checkpointClose end 

EDIT 2
我在单独的进程中启动HSQLDB(Java的罐子..),并作为命令行参数我加--silent false。现在,关于这个单独的进程控制台我看到以下内容:

[[email protected]]: [Thread[HSQLDB Server @a09ee92,5,main]]: handleConnection(Socket[addr=/127.0.0.1,port=38959,localport=9001]) entered 
[[email protected]]: [Thread[HSQLDB Server @a09ee92,5,main]]: handleConnection() exited 
[[email protected]]: 3:SQLCLI:MODE:31 
[[email protected]]: [Thread[HSQLDB Connection @2b14b766,5,HSQLDB Connections @a09ee92]]: 3:Trying to connect user 'SA' to DB (mydb) 
[[email protected]]: [Thread[HSQLDB Connection @2b14b766,5,HSQLDB Connections @a09ee92]]: 3:Connected user 'SA' 
[[email protected]]: 3:SQLCLI:SQLPREPARE SELECT * FROM foo 
[[email protected]]: 3:SQLCLI:SQLEXECUTE:1 
[[email protected]]: 3:SQLCLI:SQLDISCONNECT 
[[email protected]]: [Thread[HSQLDB Server @a09ee92,5,main]]: handleConnection(Socket[addr=/127.0.0.1,port=38960,localport=9001]) entered 
[[email protected]]: [Thread[HSQLDB Server @a09ee92,5,main]]: handleConnection() exited 
[[email protected]]: 4:SQLCLI:MODE:31 
[[email protected]]: [Thread[HSQLDB Connection @f5cabc4,5,HSQLDB Connections @a09ee92]]: 4:Trying to connect user 'SA' to DB (mydb) 
[[email protected]]: [Thread[HSQLDB Connection @f5cabc4,5,HSQLDB Connections @a09ee92]]: 4:Connected user 'SA' 
[[email protected]]: 4:SQLCLI:SQLPREPARE SELECT * FROM test WHERE id IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)) 
[[email protected]]: 4:SQLCLI:SQLEXECUTE:1 
[[email protected]]: 4:SQLCLI:MODE:18 
[[email protected]]: 4:SQLCLI:SQLDISCONNECT 

此行HSQLDB Connection @XXXXXXXX不同,每次查询,此外,每次查询我看到Trying to connect user 'SA' to DB (mydb)。这是否意味着连接池不被使用?

+0

我对HSQLDB的管理没有太多了解,但是您不能检查日志以查看何时创建新连接?最糟糕的情况是,查看文档:“*服务器或WebServer实例可以使用属性server.silent = false启动。这会导致所有连接及其执行的语句在语句提交到服务器时打印到标准输出。 *“ –

+0

作为服务器运行,并按照上面的建议'server.silent = false'。这是最简单的选择。 – fredt

+0

@fredt请参阅我的编辑1 –

服务器消息显示已建立连接,执行单个SQL语句,并且连接已关闭。

对于每个请求都建立新连接,您的怀疑是正确的。

我们现在知道,根本没有使用池,或者它不能正常工作,也不会重用其连接。也就是说,我们不知道连接池是否可以负责,或者应用程序没有使用连接池。这只能通过查看您的设置才能找到,因为HSQLDB不知道哪个软件创建了连接。