Java 在事务中关闭连接时会发生什么情况?

Java 在事务中关闭连接时会发生什么情况?,java,jdbc,transactions,Java,Jdbc,Transactions,我正在使用SQLServer和SpringsJtaTransactionManager 给出这样一种方法: @Transactional public void something() { try (final Connection conn1 = getConnection()) { //insert/update stuff in database } try (final Connection conn2 = getConnection()) {

我正在使用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不需要了解数据源或任何其他特定资源,因为它使用容器的全局事务管理基础架构


我认为您误用了
@Transactional
,您不应该在它内部自己创建连接您使用的是什么驱动程序?正如javadoc所述,这些东西是
实现定义的
。需要仔细检查的是,它不是事务性的,而是@TransactionAttribute。所以可能是JavaEE,但该项目使用JavaEE和Spring的混合,所以有点难以了解。这是遗留代码(所以遗留代码需要用所有大写字母编写)。这个问题试图概括这个问题:我不确定这句话与我的问题有什么关系。我想知道当您在事务中,并且连接正在关闭时会发生什么。@Tobb您不应该在
@Transactional
中更新连接,所有方法都应该使用相同的连接。我知道我不应该这样做。我正在做的代码是由那些人编写的,不多。这就是为什么我试图弄清楚它实际上是如何工作的。@Tobb如果在连接上不显式调用commit,并且auto commit设置为false,这样它就不会在methodOk内提交事务,就我所知,没有显式提交。不确定是否自动提交,但由于实际上对数据库进行了更改,我假设它处于启用状态。