您的位置:首页 > 编程语言 > Java开发

javasql事务隔离,和spring事务传播

2016-09-13 10:16 295 查看
一:

在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>


=
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: