附加的 Record 是线程安全的吗?
Is an attached Record thread-safe?
附加的 jOOQ Record
(UpdatableRecord
) 是线程安全的吗,即我可以在一个线程中附加(获取)记录,然后将其存储在另一个线程中而不会产生负面影响吗?我应该在原来的线程中分离它并在新线程中附加它吗?
我知道 jOOQ manual page 关于 DSLContext
的线程安全。我正在使用 jOOQ 的 Spring 引导自动配置,所以它应该都是线程安全的(使用 Spring 的 DataSourceTransactionManager 和 Hikari 池)。
但还有以下问题:
- 当原始线程中的事务打开时,附加记录如何表现,并且在提交原始事务之前或之后在另一个线程中调用
store()
? jOOQ是不是每次操作都打开一个新的连接?
- 附加的记录是否会保持跨线程的连接打开,这可能会导致资源泄漏?
jOOQ 记录不是线程安全的。它是由普通 Object[]
支持的简单可变容器。因此,跨线程共享可变状态时可能会出现所有常见问题。
但你的问题并不是关于记录的线程安全。
How does an attached Record behave when a transaction in the original thread is opened, and store() is called in another thread either before or after the original transaction has been committed? Does jOOQ open a new connection every time for each operation?
这与 Record
无关,而是你如何配置 jOOQ 的 ConnectionProvider
。 jOOQ 不保持连接甚至不打开连接。您可以通过 ConnectionProvider
(可能通过某些 Spring 配置的 DataSource
向 jOOQ 传递一个连接来显式或隐式地做到这一点。对于每次数据库交互,jOOQ 都会在交互后再次 acquire()
a connection, and release()
它。 Record
不知道这个连接是怎么获得的。它只运行获取和释放连接的 jOOQ 查询。
事实上,jOOQ 甚至并不真正关心你的交易(除非你正在使用 jOOQ 的交易API,但你不是)。
Would the attached Record be keeping a connection open across threads, which might then lead to resource leaks?
不,记录“附加”到 Configuration
,而不是连接。 Configuration
包含一个 ConnectionProvider
,它执行您配置的任何操作。
附加的 jOOQ Record
(UpdatableRecord
) 是线程安全的吗,即我可以在一个线程中附加(获取)记录,然后将其存储在另一个线程中而不会产生负面影响吗?我应该在原来的线程中分离它并在新线程中附加它吗?
我知道 jOOQ manual page 关于 DSLContext
的线程安全。我正在使用 jOOQ 的 Spring 引导自动配置,所以它应该都是线程安全的(使用 Spring 的 DataSourceTransactionManager 和 Hikari 池)。
但还有以下问题:
- 当原始线程中的事务打开时,附加记录如何表现,并且在提交原始事务之前或之后在另一个线程中调用
store()
? jOOQ是不是每次操作都打开一个新的连接? - 附加的记录是否会保持跨线程的连接打开,这可能会导致资源泄漏?
jOOQ 记录不是线程安全的。它是由普通 Object[]
支持的简单可变容器。因此,跨线程共享可变状态时可能会出现所有常见问题。
但你的问题并不是关于记录的线程安全。
How does an attached Record behave when a transaction in the original thread is opened, and store() is called in another thread either before or after the original transaction has been committed? Does jOOQ open a new connection every time for each operation?
这与 Record
无关,而是你如何配置 jOOQ 的 ConnectionProvider
。 jOOQ 不保持连接甚至不打开连接。您可以通过 ConnectionProvider
(可能通过某些 Spring 配置的 DataSource
向 jOOQ 传递一个连接来显式或隐式地做到这一点。对于每次数据库交互,jOOQ 都会在交互后再次 acquire()
a connection, and release()
它。 Record
不知道这个连接是怎么获得的。它只运行获取和释放连接的 jOOQ 查询。
事实上,jOOQ 甚至并不真正关心你的交易(除非你正在使用 jOOQ 的交易API,但你不是)。
Would the attached Record be keeping a connection open across threads, which might then lead to resource leaks?
不,记录“附加”到 Configuration
,而不是连接。 Configuration
包含一个 ConnectionProvider
,它执行您配置的任何操作。