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

一:

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


=



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值