如何检查是否使用了连接池

时间:2017-04-04 12:52:57

标签: java database jdbc hsqldb

我在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网址:

 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

编辑2
我在单独的进程(java -jar ..)中启动了Hsqldb,并且作为命令行参数我添加了--silent false。现在在这个单独进程的控制台上,我看到以下内容:

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

此行HSQLDB Connection @XXXXXXXX对于每个查询都有所不同,除了每个查询,我都会看到Trying to connect user 'SA' to DB (mydb)。这一切是否意味着没有使用连接池?

1 个答案:

答案 0 :(得分:1)

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

您的怀疑证明是正确的,因为每次请求都会建立新连接。

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