spring实现事务功能
1.引入tx命名空间
2.在spring配置文件中添加配置
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="druidDataSource"></property>
</bean>
<!--
开启事务的注解驱动
通过注解@Transactional所标识的方法或标识的类中所有的方法,都会被事务管理器管理事务
-->
<!-- transaction-manager属性的默认值是transactionManager,如果事务管理器bean的id正好就是这个默认值,则可以省略这个属性 -->
<tx:annotation-driven transaction-manager="transactionManager" />
4.添加事务注解
一般在service层添加
@Transactional标识在方法上,则只会影响该方法
@Transactional标识的类上,则会影响类中所有的方法
事务属性
- 1.只读 readonly
@Transactional(readOnly = true);对增删改操作设置只读会抛出下面异常:
Caused by: java.sql.SQLException: Connection is read-only.
Queries leading to data modification are not allowed - 2.超时 timeout
@Transactional(timeout = 3)超时回滚,释放资源。
- 3.隔离级别
@Transactional(isolation = Isolation.DEFAULT)//使用数据库默认的隔离级别 @Transactional(isolation = Isolation.READ_UNCOMMITTED)//读未提交 @Transactional(isolation = Isolation.READ_COMMITTED)//读已提交 @Transactional(isolation = Isolation.REPEATABLE_READ)//可重复读 @Transactional(isolation = Isolation.SERIALIZABLE)//串行化-4、传播行为
@Transactional(propagation = Propagation.REQUIRED) 默认情况;