线程安全
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
org.jooq.Configuration
,以及因此 org.jooq.DSLContext
,不保证线程安全,但通过仔细遵守一些规则,它们可以以线程安全的方式共享。 我们鼓励共享 Configuration
实例,因为它们包含无需重复工作的缓存,例如 org.jooq.impl.DefaultRecordMapper
的反射字段和方法查找。 如果您使用 Spring 或 CDI 进行依赖注入,您将希望能够在您使用它的任何地方注入 DSLContext
实例。
尝试在线程之间共享 Configuration
和 DSLContext
时,需要考虑以下几点
-
由于历史原因,
Configuration
是可变的。 在初始化之后,必须避免调用各种Configuration.set()
方法,如果Configuration
(以及因此DSLContext
)实例在线程之间共享。 如果您希望为一次性使用修改Configuration
的某些元素,请改用Configuration.derive()
方法,该方法会创建一个副本。 -
Configuration
组件,例如org.jooq.conf.Settings
也是可变的。 此处适用相同的修改规则。 -
Configuration
允许提供用户定义的 SPI 实现(有关示例,请参见上文)。 所有这些也必须是线程安全的,才能使其包装的Configuration
具有线程安全性。 例如,如果您使用的是org.jooq.impl.DataSourceConnectionProvider
,则必须确保您的javax.sql.DataSource
也是线程安全的。 当您使用第三方连接池时,通常是这种情况。
如上所述,尽管 Configuration
没有做出任何此类保证,但它的设计目的是以线程安全的方式工作。
反馈
您对此页面有任何反馈吗? 我们很乐意听到!