vic*_*rio 3 java spring transactions transactional rollback
我有一个主要的 DB 处理程序方法,它调用其他方法,这些方法也与 BD 事物一起工作。
我为 main 方法添加了 @Transactional 注释,因为如果出现问题,我想回滚所有内容。
我的问题是:我是否应该也为子方法添加此注释,或者它会知道子方法是从事务性方法调用的。
比如删除方法中出现异常,如何保证写入部分也会回滚:
@Transactional
public void maintDbTings() {
writing();
deleting();
}
@Transactional //do I need this?
public void writing() {
//no exceptions
}
@Transactional //do I need this?
public void deleting() {
//exception occurs
}
Run Code Online (Sandbox Code Playgroud)
用简单的英语,当你有这个时:
@Transactional
public void maintDbTings() {
writing();
}
@Transactional //do I need this?
public void writing() {
//no exceptions
}
Run Code Online (Sandbox Code Playgroud)
并调用mainDbTings,@Transactional对writing没有影响。这意味着启动的事务mainDbThings仍将以书面形式存在/打开。因此,在这种情况下,您可以轻松删除它。
另一方面,由于writing 是公共的,有人可能会称它为期望它是事务性的,因为它很可能是一个服务类。在这种情况下作出writing是@Transactional是强制性的,你不能放弃它。
所以这真的取决于你的需求。
Spring 在遇到一个用 注释的方法时开始一个事务@Transactional。事务的范围涵盖该方法的执行、该方法调用的任何方法的执行等,直到该方法返回。配置的 PlatformTransactionManager 涵盖且您在事务范围内使用的任何托管资源都参与事务。例如,如果您使用org.springframework.jdbc.datasource.DataSourceTransactionManager,则从链接检索到的连接会DataSource
自动参与事务。事务终止两种方式之一:方法直接完成执行并且事务管理器提交事务,或者方法抛出异常并且事务管理器回滚事务。
我希望现在清楚了。
| 归档时间: |
|
| 查看次数: |
1680 次 |
| 最近记录: |