Best approach for returning connection objects to HikariCP pool

user3813256 picture user3813256 · Aug 18, 2014 · Viewed 18.5k times · Source

I am trying to use HikariCP connection pool. I was able to get it to work and get a connection that I could use. I am not sure what is the best approach for returning the connection to the pool.

I have the following questions:

  • Should I close the connection when I am done, rely on idleTimeout and maxLifetime settings or is there another call that I can use so as not to hog the connections from the pool?
  • If I close the connections (instead of returning to the pool), would that not result in additional connection objects being created to meet the requirements of the connection pool size?

Looking for helpful suggestions.

Answer

Ordous picture Ordous · Aug 18, 2014

As with most connection pools, Hikari doesn't give you an actual JDBC Connection when you ask for one. What it does instead is give you a proxy that implements the Connection interface. In the case of Hikari - it's a ConnectionProxy object.

This proxy serves a few purposes, the main of which is - take the control of opening/closing connections and statements away from you and into the connection pool. This happens automagically and you should be using your connections as usual. This includes closing them after use.

If you look at the source code for Hikari, at the ConnectionProxy class in particular, you will see that the close() method is very different from the standard one. The code reads as:

Mark the connection as closed, do cleanup, reset underlying connection state and params.

Hence, simply calling close() will just clean and return the connection to the pool.