gpt4 book ai didi

java - 如果线程在执行过程中中断 Spring 事务模板,是否可以保证回滚?

转载 作者:行者123 更新时间:2023-11-30 03:04:09 26 4
gpt4 key购买 nike

我有一个线程正在执行一系列指令,包括针对我的数据库的 SQL 更新。我希望能够通过在事务模板中间有任何事情中断线程执行时强制回滚来保护数据库数据的完整性。此线程执行的一个示例是:

public void run() {
executeStatements();
}

public void executeStatements() throws DataAccessException {
return transactionTemplate.execute(new TransactionCallback<Long>() {
public Long doInTransaction(TransactionStatus transactionStatus) {
// series of statements
}
}
});

我已经检查了文档,但找不到任何具体说明这是否能够回滚事务,即使线程被中断

最佳答案

这是根据我自己的经验得出的,因为我也找不到明确的答案,但是,根据经验,如果您在执行事务之前生成线程,那么中断线程将阻止事务提交。如果线程作为事务的一部分生成,则不会,因为事务句柄将位于另一个线程上,并且根据您处理异常和线程中断的方式,事务仍然可以提交。

这里有一些关于这个主题的简单读物http://www.codingpedia.org/jhadesdev/how-does-spring-transactional-really-work/

因此请记住,TransactionTemplate 是对事务的低级访问,并且不使用方面 @Before @After对于 @Transactional注释。这取决于你来管理。一个TransactionException当事务回滚或发生其他一些系统错误时会发生。 TransactionTemplate 本身是完全线程安全的,不会创建新线程。它会在调用 execute 时绑定(bind)当前线程上所需的任何内容。 .

希望这有帮助。如果我找到更多阅读 Material ,我会更新答案。

关于java - 如果线程在执行过程中中断 Spring 事务模板,是否可以保证回滚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35207861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com