我正在使用SQLServer
和Springs JtaTransactionManager
。
给出这样的方法:
@Transactional
public void something() {
try (final Connection conn1 = getConnection()) {
//insert/update stuff in database
}
try (final Connection conn2 = getConnection()) {
//insert/update stuff in database
}
}
此方法实际上是可交易的吗?关闭conn1
时所做的更改会发生什么,是否将它们提交到数据库?如果在使用conn2
时发生异常,会发生什么情况,是否可以回滚通过封闭连接进行的更改?
您不应该在@Transactional
内部手动加载/获取连接或数据源,尤其是在使用JtaTransactionManager时]
[JtaTransactionManager不需要了解数据源或任何其他特定资源
,因为它使用了容器的全局事务管理基础结构。
数据库通常遵循ACID原则:要遵循的一些规则。