Hello,
Thanks for your message. Indeed, that's what you should do. Here are some further hints:
A DataSource is a common abstraction that hides away the creation and management of JDBC Connections. Connection pools use this abstraction to implement the pool semantics. Clients will block on the DataSource.getConnection() call, once the pool is exhausted, until a Connection becomes free again via Connection.close() (at least, that's how it's usually implemented).
jOOQ has its own abstraction to help users inject their Connection management lifecycle: The ConnectionProvider. When jOOQ needs a Connection (a query is executed), it gets the Connection from ConnectionProvider.acquire(). When jOOQ has finished with the Connection, it returns it to ConnectionProvider.release().
The DataSourceConnectionProvider bridges the jOOQ semantics to the common DataSource semantics.
With Hikari, you can simply do, for example:
DSL.using(hikariDataSouce, SQLDialect.H2) // H2 as an example
.selectOne()
.fetch();