Connection与DataSource
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
与 JDBC 连接交互
虽然您可以使用 jOOQ 仅用于 SQL 构建,但您也可以针对 JDBC java.sql.Connection
运行查询。 在内部,jOOQ 从这样的连接创建 java.sql.Statement
或 java.sql.PreparedStatement
对象,以便执行语句。 正常操作模式是提供一个带有 JDBC 连接的 配置,您将自己控制其生命周期。 这意味着 jOOQ 不会主动关闭连接,回滚或提交事务。
请注意,在这种情况下,jOOQ 将在内部使用 org.jooq.impl.DefaultConnectionProvider
,如果您愿意,可以直接引用它。 DefaultConnectionProvider 公开了各种事务控制方法,例如 commit(),rollback() 等。
与 JDBC 数据源交互
但是,如果您处于 Java EE 或 Spring 上下文中,您可能希望使用 javax.sql.DataSource
。 从这样的 DataSource 获取的连接将在 jOOQ 执行查询后关闭。 这样的关闭操作的语义应该是将连接返回到连接池,而不是实际关闭底层连接。 通常,这在使用分布式 JTA 事务的环境中是有意义的。
请注意,在这种情况下,jOOQ 将在内部使用 org.jooq.impl.DataSourceConnectionProvider
,如果您愿意,可以直接引用它。
注入自定义行为
如果您的特定环境与上述任何方法的工作方式不同,您可以将您自己的 ConnectionProvider 自定义实现注入到 jOOQ 中。 这是您必须满足的 API 契约
public interface ConnectionProvider { // Provide jOOQ with a connection Connection acquire() throws DataAccessException; // Get a connection back from jOOQ void release(Connection connection) throws DataAccessException; }
响应式查询
如果您希望使用 R2DBC 驱动程序,则不必向您的 配置 提供 org.jooq.ConnectionProvider
。 相反,jOOQ 可以与 io.r2dbc.spi.Connection
(jOOQ 永远不会关闭它)或 io.r2dbc.spi.ConnectionFactory
(jOOQ 将关闭它创建的所有 R2DBC 连接)。
反馈
您对此页面有任何反馈吗? 我们很乐意听到它!