事务传播级别探究 —— 怎样利用事务传播级别解决不同的业务需求
什么是传播级别 <ul><ul><li>事务传播级别是事务本身的一个属性,决定当前事务执行期间与外部事务的关系。 </li></ul></ul><ul><ul><li>加入外部事务? </li></ul></ul><ul><ul><li>挂起外...
在事务中如何被定义? <ul><ul><li>TransactionDefinition 接口中定义了其中事务传播级别 </li></ul></ul><ul><ul><li>public interface TransactionDefinit...
七种事务传播级别 <ul><ul><li>PROPAGATION_REQUIRED </li></ul></ul><ul><ul><li>PROPAGATION_REQUIRES_NEW </li></ul></ul><ul><ul><li>P...
PROPAGATION_REQUIRED <ul><ul><li>如果外部已经存在事务,则加入外部事务,如果外部不存在事务,则新建一个事务。 </li></ul></ul><ul><ul><li>存在父事务 </li></ul></ul>子事务...
举例说明 <ul><ul><li>methodA (){ </li></ul></ul><ul><ul><li>doSomethingA(); </li></ul></ul><ul><ul><li>methodB(); //call metho...
PROPAGATION_REQUIRES_NEW <ul><ul><li>不管外部是否有事务,都新建事务运行 </li></ul></ul>父事务 子事务 新建事务 挂起 恢复
举例说明 <ul><ul><li>methodA (){ </li></ul></ul><ul><ul><li>doSomethingA(); </li></ul></ul><ul><ul><li>methodB();//call method...
PROPAGATION_MANDATORY <ul><ul><li>外部必须存在事务,加入外部事务执行,否则抛出异常 </li></ul></ul>存在父事务 加入父事务 子事务 不存在父事务 子事务
举例说明 <ul><ul><li>methodA (){ </li></ul></ul><ul><ul><li>doSomethingA(); </li></ul></ul><ul><ul><li>methodB(); //call metho...
PROPAGATION_NEVER <ul><ul><li>外部不能存在事务,如果存在事务,则抛出异常 </li></ul></ul>子事务 父事务 不存在父事务 非事务方式运行
举例说明 <ul><ul><li>methodA (){ </li></ul></ul><ul><ul><li>doSomethingA(); </li></ul></ul><ul><ul><li>methodB(); //call metho...
PROPAGATION_SUPPORTS <ul><ul><li>外部存在事务则加入事务,不存在事务则以非事务的方式运行 </li></ul></ul>子事务 加入父事务 父事务 不存在父事务 非事务方式运行
PROPAGATION_NOT_SUPPORTED <ul><ul><li>总是以非事务方式运行,并挂起任何事务 </li></ul></ul>父事务 非事务方式运行 挂起 恢复
举例说明 <ul><ul><li>methodA (){ </li></ul></ul><ul><ul><li>doSomethingA(); </li></ul></ul><ul><ul><li>methodB(); //call metho...
PROPAGATION_NESTED <ul><ul><li>外部存在事务,嵌套执行。不存在事务,新建事务。 </li></ul></ul><ul><ul><li>注意与 PROPAGATION_REQUIRED 的区别!! </li></ul...
举例说明 <ul><ul><li>methodA (){ </li></ul></ul><ul><ul><li>doSomethingA(); </li></ul></ul><ul><ul><li>methodB(); //call metho...
推荐资料 <ul><ul><li>http://www.javaeye.com/topic/78674   详解 spring 事务属性 </li></ul></ul><ul><ul><li>http://www.javaeye.com/top...
请看 eclipse 代码演示 <ul><ul><li>红包项目中事务隔离级别的典型应用 </li></ul></ul><ul><ul><li>FAQ </li></ul></ul>
下期预告 <ul><ul><li>《事务隔离级别探究》 </li></ul></ul><ul><ul><li>读出的数据让你困惑? </li></ul></ul><ul><ul><li>《 log4J 到底干了什么》 </li></ul></u...
<ul><ul><li>首先感谢祖国!谢谢大家! </li></ul></ul>
Upcoming SlideShare
Loading in …5
×

事务传播级别探究

898 views
790 views

Published on

1 Comment
1 Like
Statistics
Notes
  • spring事务相关
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
898
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
12
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

事务传播级别探究

  1. 1. 事务传播级别探究 —— 怎样利用事务传播级别解决不同的业务需求
  2. 2. 什么是传播级别 <ul><ul><li>事务传播级别是事务本身的一个属性,决定当前事务执行期间与外部事务的关系。 </li></ul></ul><ul><ul><li>加入外部事务? </li></ul></ul><ul><ul><li>挂起外部,重新开始新事务? </li></ul></ul><ul><ul><li>不允许执行事务? </li></ul></ul>
  3. 3. 在事务中如何被定义? <ul><ul><li>TransactionDefinition 接口中定义了其中事务传播级别 </li></ul></ul><ul><ul><li>public interface TransactionDefinition {    </li></ul></ul><ul><ul><li>int getPropagationBehavior();    </li></ul></ul><ul><ul><li>     int getIsolationLevel();    </li></ul></ul><ul><ul><li>     int getTimeout();    </li></ul></ul><ul><ul><li>     boolean isReadOnly();    </li></ul></ul><ul><ul><li>}  </li></ul></ul>
  4. 4. 七种事务传播级别 <ul><ul><li>PROPAGATION_REQUIRED </li></ul></ul><ul><ul><li>PROPAGATION_REQUIRES_NEW </li></ul></ul><ul><ul><li>PROPAGATION_MANDATORY </li></ul></ul><ul><ul><li>PROPAGATION_NEVER </li></ul></ul><ul><ul><li>PROPAGATION_SUPPORTS </li></ul></ul><ul><ul><li>PROPAGATION_NOT_SUPPORTED </li></ul></ul><ul><ul><li>PROPAGATION_NESTED </li></ul></ul>
  5. 5. PROPAGATION_REQUIRED <ul><ul><li>如果外部已经存在事务,则加入外部事务,如果外部不存在事务,则新建一个事务。 </li></ul></ul><ul><ul><li>存在父事务 </li></ul></ul>子事务 加入父事务 不存在事务 子事务 新建事务运行
  6. 6. 举例说明 <ul><ul><li>methodA (){ </li></ul></ul><ul><ul><li>doSomethingA(); </li></ul></ul><ul><ul><li>methodB(); //call methodB </li></ul></ul><ul><ul><li>} //PROPAGATION_REQUIRED </li></ul></ul><ul><ul><li>methodB (){ </li></ul></ul><ul><ul><li>doSomethingB(); </li></ul></ul><ul><ul><li>} //PROPAGATION_REQUIRED </li></ul></ul>
  7. 7. PROPAGATION_REQUIRES_NEW <ul><ul><li>不管外部是否有事务,都新建事务运行 </li></ul></ul>父事务 子事务 新建事务 挂起 恢复
  8. 8. 举例说明 <ul><ul><li>methodA (){ </li></ul></ul><ul><ul><li>doSomethingA(); </li></ul></ul><ul><ul><li>methodB();//call methodB </li></ul></ul><ul><ul><li>} //PROPAGATION_REQUIRED </li></ul></ul><ul><ul><li>methodB (){ </li></ul></ul><ul><ul><li>doSomethingB(); </li></ul></ul><ul><ul><li>} //PROPAGATION_REQUIRES_NEW </li></ul></ul>
  9. 9. PROPAGATION_MANDATORY <ul><ul><li>外部必须存在事务,加入外部事务执行,否则抛出异常 </li></ul></ul>存在父事务 加入父事务 子事务 不存在父事务 子事务
  10. 10. 举例说明 <ul><ul><li>methodA (){ </li></ul></ul><ul><ul><li>doSomethingA(); </li></ul></ul><ul><ul><li>methodB(); //call methodB </li></ul></ul><ul><ul><li>} //PROPAGATION_REQUIRED </li></ul></ul><ul><ul><li>methodB (){ </li></ul></ul><ul><ul><li>doSomethingB(); </li></ul></ul><ul><ul><li>} //PROPAGATION_MANDATORY  </li></ul></ul>
  11. 11. PROPAGATION_NEVER <ul><ul><li>外部不能存在事务,如果存在事务,则抛出异常 </li></ul></ul>子事务 父事务 不存在父事务 非事务方式运行
  12. 12. 举例说明 <ul><ul><li>methodA (){ </li></ul></ul><ul><ul><li>doSomethingA(); </li></ul></ul><ul><ul><li>methodB(); //call methodB </li></ul></ul><ul><ul><li>} //PROPAGATION_REQUIRED </li></ul></ul><ul><ul><li>methodB (){ </li></ul></ul><ul><ul><li>doSomethingB(); </li></ul></ul><ul><ul><li>} //PROPAGATION_NEVER  </li></ul></ul>
  13. 13. PROPAGATION_SUPPORTS <ul><ul><li>外部存在事务则加入事务,不存在事务则以非事务的方式运行 </li></ul></ul>子事务 加入父事务 父事务 不存在父事务 非事务方式运行
  14. 14. PROPAGATION_NOT_SUPPORTED <ul><ul><li>总是以非事务方式运行,并挂起任何事务 </li></ul></ul>父事务 非事务方式运行 挂起 恢复
  15. 15. 举例说明 <ul><ul><li>methodA (){ </li></ul></ul><ul><ul><li>doSomethingA(); </li></ul></ul><ul><ul><li>methodB(); //call methodB </li></ul></ul><ul><ul><li>} //PROPAGATION_REQUIRED </li></ul></ul><ul><ul><li>methodB (){ </li></ul></ul><ul><ul><li>doSomethingB(); </li></ul></ul><ul><ul><li>} //PROPAGATION_NOT_SUPPORTED  </li></ul></ul>
  16. 16. PROPAGATION_NESTED <ul><ul><li>外部存在事务,嵌套执行。不存在事务,新建事务。 </li></ul></ul><ul><ul><li>注意与 PROPAGATION_REQUIRED 的区别!! </li></ul></ul>父事务 savePoint 子事务 作为父事务的一部分执行
  17. 17. 举例说明 <ul><ul><li>methodA (){ </li></ul></ul><ul><ul><li>doSomethingA(); </li></ul></ul><ul><ul><li>methodB(); //call methodB </li></ul></ul><ul><ul><li>} //PROPAGATION_REQUIRED </li></ul></ul><ul><ul><li>methodB (){ </li></ul></ul><ul><ul><li>doSomethingB(); </li></ul></ul><ul><ul><li>} //PROPAGATION_NESTED  </li></ul></ul>
  18. 18. 推荐资料 <ul><ul><li>http://www.javaeye.com/topic/78674 详解 spring 事务属性 </li></ul></ul><ul><ul><li>http://www.javaeye.com/topic/35907 解惑 spring 嵌套事务 </li></ul></ul>
  19. 19. 请看 eclipse 代码演示 <ul><ul><li>红包项目中事务隔离级别的典型应用 </li></ul></ul><ul><ul><li>FAQ </li></ul></ul>
  20. 20. 下期预告 <ul><ul><li>《事务隔离级别探究》 </li></ul></ul><ul><ul><li>读出的数据让你困惑? </li></ul></ul><ul><ul><li>《 log4J 到底干了什么》 </li></ul></ul><ul><ul><li>你的日志是怎样被他处理的?日志如何精准定位? </li></ul></ul><ul><ul><li>《带逻辑 SQL 写法的探究》 </li></ul></ul><ul><ul><li>如何不用 java 逻辑处理一次获取到你要的显示结果? </li></ul></ul>
  21. 21. <ul><ul><li>首先感谢祖国!谢谢大家! </li></ul></ul>

×