一:
在java.sql.Connection接口中定义了这5种事务隔离级别:(事务隔离级别是绑定在Connection上的)
① int TRANSACTION_NONE = 0; 指示事务不受支持的常量。
② int TRANSACTION_READ_UNCOMMITTED = 1; 指示可以发生脏读 (dirty read)、不可重复读和虚读 (phantom read) 的常量。
③int TRANSACTION_READ_COMMITTED = 2; 指示不可以发生脏读的常量;不可重复读和虚读可以发生。
④ int TRANSACTION_REPEATABLE_READ= 4; 指示不可以发生脏读和不可重复读的常量;虚读可以发生。
⑤ int TRANSACTION_SERIALIZABLE = 8; 指示不可以发生脏读、不可重复读和虚读的常量。
二:
注意这里的第①种是Mysql不支持的。下面只是说另外四种
②未提交读。
对于自身事务,和其他事物,都可以读取到没有执行事务提交的信息。
③读已提交,
对于自身,可以读取到没有执行事务提交的数据。对于其他事务,只能读取到已经提交的。
④可以重复度,
对于其他事物,只能读取到已经提交的。对于自身,只能读取到已经提交的。
⑤串行化读
如果有其他一个事务没有提交。这个事务执行语句将阻塞。对于自身,只能读取已提交的信息。
三spring事务传播
==
Propagation : key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用:
1 PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
2 PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
3 PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
4 PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
5 PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6 PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
==
四:
在实际的Spring开发中,会使用注解进行事务配置:org.springframework.transaction.annotation.Transactional
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Transactional {//标记该注解表示此方法事务执行
@AliasFor("transactionManager")
String value() default "";
@AliasFor("value")
String transactionManager() default "";
Propagation propagation() default Propagation.REQUIRED;//配置传播
Isolation isolation() default Isolation.DEFAULT;//配置事务隔离级别
int timeout() default TransactionDefinition.TIMEOUT_DEFAULT;//
boolean readOnly() default false;
Class<? extends Throwable>[] rollbackFor() default {};
String[] rollbackForClassName() default {};
Class<? extends Throwable>[] noRollbackFor() default {};
String[] noRollbackForClassName() default {};
}
=还得配置xml才行
=
<context:component-scan base-package="com.we" />
<!-- 事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true"></tx:annotation-driven>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
=