需要设置传播设置。
@Transactional(propagation = Propagation.REQUIRED)事务是读/写的。
在哪种情况下使用这些?请给我举例说明
发布于 2017-10-17 11:52:26
Spring事务缺省值为
@Transactional(propagation = Propagation.REQUIRED)因此,您不需要指定传播属性。
那么,@Transactional 对spring组件的注释意味着什么?
application context中不存在事务,那么spring容器将启动一个新事务。Propagation.REQUIRED的多个方法,则在逻辑上以嵌套方式分配给每个方法的事务行为,但它们都位于相同的物理事务下。,那么,结果是什么?
结果是,如果任何嵌套事务失败,则整个事务将失败并回滚(不要在db中插入任何值),而不是提交。
示例:
@Service
public class ServiceA{
@Transactional(propagation = Propagation.REQUIRED)
public void foo(){
fooB();
}
@Transactional(propagation = Propagation.REQUIRED)
public void fooB(){
//some operation
}
}解释:在本例中,分配了一个事务行为,而在foo()中,另一个方法fooB()被调用,它也是事务性的。在这里,fooB()在foo()方面充当嵌套事务。如果fooB()由于任何原因失败,那么foo()也无法提交。相反,它倒退了。
发布于 2017-10-17 10:27:30
这个注释只是为了帮助Spring框架管理数据库事务。
假设您有一个写入数据库的服务bean,并且您希望确保写入是在事务中完成的,然后使用
@Transactional(propagation = Propagation.REQUIRED)下面是Spring服务bean的一个小示例。
@Service
class MyService {
@Transactional(propagation = Propagation.REQUIRED)
public void writeStuff() {
// write something to your database
}
}Transactional注释告诉Spring:
https://stackoverflow.com/questions/46786651
复制相似问题