spring配置事物方式:
spring+mybatis
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
spring+hibernate
notice:
@Transactional作用于类名上启用事物,该类中的public修饰的方法都启用事物
同样该注解作用在某个方法上的时候,该方法也必须是public修饰的
具体使用及配置多个属性定义
同时一个事物可以定义多个属性,例如:
@Transactional(propagation=Propagation.REQUIRED,rollbackFor=Exception.class,timeout=1,isolation=Isolation.DEFAULT)
public void saveUser(Map map) throws Exception {
System.out.println("方法开始");
for (int i = 0; i < 500000; i++) {
System.out.println("*");
}
System.out.println("进入保存");
userDao.saveUser(map);
System.out.println("退出保存");
}
事物配置中有如下属性可供配置:
事物的传播性(@Transactional(propagation=Propagation.REQUIRED)):
REQUIRED:默认属性,如果有事物加入事物,没有事物新建一个事物。
REQUIRES_NEW:新建一个事物,如果有事物,则把该事物挂起,新建的事物和挂起的事物没有任务关系
SUPPORTS:支持当前事物,如果没有事物,则按照非事物方式执行
MANDATORY:支持当前事物,如果当前没食物则抛出异常
NOT_SUPPORTED:以非事物方式执行,如果当前存在事物则挂起
NEVER:以非事物方式执行,如果存在事物则抛出异常
NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。它使用了一个单 独的事务,这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionManager事务管理器起效。
事物的隔离性:
事物的超时性(@Transactional(timeout=30)):
事物的超时性和数据库连接的超时性不是一个概念
回滚:
指定单一异常类:@Transactional(rollbackFor=RuntimeException.class)
指定多个异常类:@Transactional(rollbackFor={RuntimeException.class, Exception.class})