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})