java - 如何检查连接池是否被使用

标签 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)。是不是都说明没有使用连接池?

最佳答案

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

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

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

关于java - 如何检查连接池是否被使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43207830/

相关文章:

java - 以编程方式创建架构时出现未知数据库异常?

javascript - 在移动设备上确定位置时,什么比 GPS 更准确

database - 如何 rake 数据库 :drop and rake db:create on Heroku?

java - JDBC 连接池中的 JDBC 驱动程序加载问题

mysql - Solr DataImport 中的中文字符问题

java - Swing 组合框

java - 查询具有两个一对多集合的 hibernate 实体

java - ColdFusion 中的 JRE 版本

MYSQL IN语句

database - 如何高效存储数十万文档?