DropWizard 中的 JDBI 3,onDemand 重用连接
JDBI 3 in DropWizard, onDemand reusing connection
试图从文档中找出这种情况:
http://jdbi.org/#_attached_to_handle
假设你有
SomeClass dao1 = dbi.onDemand(SomeClass.class)
那么你在其他地方的另一种方法中有一些东西:
try ( Handle handle = dbi.open(); ) {
SomeClass dao2 = handle.attach(SomeClass.class);
// What happens here if I use dao1 ?
dao1.insert(...)
dao2.insert(...)
dao2.insert(...)
dao1.insert(...)
}
请注意,在这些情况下它们是同一类型。
是否会为调用的每个插入创建一个新的连接/事务,还是将它们全部分组到一个事务中?
文档中不清楚。
我的想法是,在下面,两者将表现相同,并且 dao1 在调用插入时将检查是否存在正在进行的事务/连接,并针对此类型使用那个。
但是文档说这对于 onDemand 实例是正确的,但是,附加了这个 dao2,而不是像 dao1 那样的 onDemand。
Will there be a new connection / transaction for each insert called or will they all be grouped into one transaction?
对 dao2
的调用将从显式打开的 handle
.
分组到一个事务中
对 dao1
的调用将使用每个 each 方法调用的单独事务(来自 Jdbi#onDemand
javadoc:an extension which opens and closes handles (as needed) for individual method calls
)。
如果您想在事务范围内执行来自不同 SqlObject
的方法,您有几种选择:
Jdbi#inTransaction
/Jdbi#useTransaction
:适用于 onDemand
/attach
@Transaction
和 @CreateSqlObject
的组合,如 docs
试图从文档中找出这种情况:
http://jdbi.org/#_attached_to_handle
假设你有
SomeClass dao1 = dbi.onDemand(SomeClass.class)
那么你在其他地方的另一种方法中有一些东西:
try ( Handle handle = dbi.open(); ) {
SomeClass dao2 = handle.attach(SomeClass.class);
// What happens here if I use dao1 ?
dao1.insert(...)
dao2.insert(...)
dao2.insert(...)
dao1.insert(...)
}
请注意,在这些情况下它们是同一类型。
是否会为调用的每个插入创建一个新的连接/事务,还是将它们全部分组到一个事务中?
文档中不清楚。
我的想法是,在下面,两者将表现相同,并且 dao1 在调用插入时将检查是否存在正在进行的事务/连接,并针对此类型使用那个。
但是文档说这对于 onDemand 实例是正确的,但是,附加了这个 dao2,而不是像 dao1 那样的 onDemand。
Will there be a new connection / transaction for each insert called or will they all be grouped into one transaction?
对 dao2
的调用将从显式打开的 handle
.
对 dao1
的调用将使用每个 each 方法调用的单独事务(来自 Jdbi#onDemand
javadoc:an extension which opens and closes handles (as needed) for individual method calls
)。
如果您想在事务范围内执行来自不同 SqlObject
的方法,您有几种选择:
Jdbi#inTransaction
/Jdbi#useTransaction
:适用于onDemand
/attach
@Transaction
和@CreateSqlObject
的组合,如 docs