可用版本:Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

线程安全

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

org.jooq.Configuration,以及因此 org.jooq.DSLContext,不保证线程安全,但通过仔细遵守一些规则,它们可以以线程安全的方式共享。 我们鼓励共享 Configuration 实例,因为它们包含无需重复工作的缓存,例如 org.jooq.impl.DefaultRecordMapper 的反射字段和方法查找。 如果您使用 Spring 或 CDI 进行依赖注入,您将希望能够在您使用它的任何地方注入 DSLContext 实例。

尝试在线程之间共享 ConfigurationDSLContext 时,需要考虑以下几点

  • 由于历史原因,Configuration 是可变的。 在初始化之后,必须避免调用各种 Configuration.set() 方法,如果 Configuration(以及因此 DSLContext)实例在线程之间共享。 如果您希望为一次性使用修改 Configuration 的某些元素,请改用 Configuration.derive() 方法,该方法会创建一个副本。
  • Configuration 组件,例如 org.jooq.conf.Settings 也是可变的。 此处适用相同的修改规则。
  • Configuration 允许提供用户定义的 SPI 实现(有关示例,请参见上文)。 所有这些也必须是线程安全的,才能使其包装的 Configuration 具有线程安全性。 例如,如果您使用的是 org.jooq.impl.DataSourceConnectionProvider,则必须确保您的 javax.sql.DataSource 也是线程安全的。 当您使用第三方连接池时,通常是这种情况。

如上所述,尽管 Configuration 没有做出任何此类保证,但它的设计目的是以线程安全的方式工作。

反馈

您对此页面有任何反馈吗? 我们很乐意听到!

The jOOQ Logo