spring的事物隔离
时间: 2023-12-02 20:41:11 浏览: 27
Spring的事务隔离级别是指多个事务同时操作一个数据库时,一个事务所能读到的数据受到其他事务影响的程度。Spring定义了五个事务隔离级别,分别为:
1. DEFAULT(默认):使用后端数据库默认的隔离级别。对大部分数据库而言,通常是 READ_COMMITTED(读已提交)级别。
2. READ_UNCOMMITTED(读未提交):最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
3. READ_COMMITTED(读已提交):允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
4. REPEATABLE_READ(可重复读):对同一字段的多次读取结果都是一致的,除非数据是被本身事务所修改,可以阻止脏读和不可重复读,但是幻读仍有可能发生。
5. SERIALIZABLE(串行化):最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,可以防止脏读、不可重复读以及幻读。
下面是一个示例,展示如何在Spring中配置事务隔离级别:
```xml
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" isolation="READ_COMMITTED"/>
<tx:method name="update*" propagation="REQUIRED" isolation="READ_COMMITTED"/>
<tx:method name="delete*" propagation="REQUIRED" isolation="READ_COMMITTED"/>
<tx:method name="get*" read-only="true" propagation="SUPPORTS" isolation="READ_COMMITTED"/>
<tx:method name="find*" read-only="true" propagation="SUPPORTS" isolation="READ_COMMITTED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="serviceOperation" expression="execution(* com.example.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation"/>
</aop:config>
```