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事务传播
==
==
四:
在实际的Spring开发中,会使用注解进行事务配置:org.springframework.transaction.annotation.Transactional
=还得配置xml才行
=
=
在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>
=
相关文章推荐
- java 垃圾回收GC
- struts2防止表单重复提交
- 25个最佳最闪亮的Eclipse开发项目
- MetaQ 安装
- java注解
- Java mysql jsp 时间对象的显示与处理
- Java形参是传值还是传引用
- java web每天定时任务
- eclipse里报:An internal error occurred during: "Building workspace". Java heap space(内存溢出)
- retrofit2+rxJava
- JAVA日志框架
- java编程思想练习
- Java中SJBArrayList自己简单实现ArrayList
- Get和Post方法的区别
- 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式
- js post传递中文参数到java后台出现乱码
- leetCode练习(19)
- Java堆和栈的区别
- SpringMVC详细示例实战教程
- Java实现排列组合算法