- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Spring事务配置管理分析
“ ” “ ” SPRING事务配置管理 枯燥的废话 什么是事务 ACID原则(原子性atomicity、一致性consistency、隔离性isolation和持久性durability) Java事务的简单分类 JDBC事务 JTA事务 容器事务 SPRING事务管理 简单分类:编程式、声明式 声明式事务的配置策略 TransactionDefinition TransactionProxy TransactionManager DataSource TransactionInterceptor TransactionAttributeSource DATASOURCE JNDI DHCP TransactionManager org.springframework.jdbc.datasource.DataSourceTransactionManager TransactionManagerInterceptor com.alibaba.intl.biz.datasource.spring.aop.TransactionManagerInterceptor TransactionManagerProxy org.springframework.aop.framework.ProxyFactoryBean TransactionAttributeSource org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource 传播行为 隔离层级 只读提示 事务超时 传播行为 PROPAGATION_MANDATORY: 方法必须在一个现存的事务中进行,否则丢出异常 PROPAGATION_NESTED: 在一个嵌入的事务中进行,如果不是,则同PROPAGATION_REQUIRED PROPAGATION_NEVER: 指出不应在事务中进行,如果有就丢出异常 PROPAGATION_NOT_SUPPORTED: 指出不应在事务中进行,如果有就暂停现存的事务 PROPAGATION_REQUIRED: 在当前的事务中进行,如果没有就建立一个新的事务 PROPAGATION_REQUIRES_NEW: 建立一个新的事务,如果现存一个事务就暂停它 PROPAGATION_SUPPORTS: 支持现在的事务,如果没有就以非事务的方式执行 隔离层级 ISOLATION_DEFAULT: 使用底层数据库预设的隔离层级隔离层级 ISOLATION_READ_COMMITTED: 允许事务读取其他并行的事务已经送出(Commit)的数据字段,可以防止Dirty read问题 ISOLATION_READ_UNCOMMITTED: 允许事务读取其他并行的事务还没送出的数据,会发生Dirty、Nonrepeatable、Phantom read等问题 ISOLATION_REPEATABLE_READ: 要求多次读取的数据必须相同,除非事务本身更新数据,可防止Dirty、Nonrepeatable read问题 ISOLATION_SERIALIZABLE: 完整的隔离层级,可防止Dirty、Nonrepeatable、Phantom read等问题,会锁定对应的数据表格,因而有效率问题 只读提示(ReadOnly Hints) 如果事务只进行读取的动作,则可以利用底层数据库在只读操作时发生的一些最佳化动作,由于这个动作利用到数据库在只读的事务操作最佳化,因而必须在事务中才有效,也就是说要搭配传播行为PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW、PROPAGATION_NESTED来设置。 例: prop key=query*PROPAGATION_REQUIRED,readOnly/prop 事务超时期间 有的事务操作可能延续很长一段的时间,事务本身可能关联到数据表的锁定,因而长时间的事务操作会有效率上的问题,对于过长的事务操作,考虑Roll back事务并要求重新操作,而不是无限时的等待事务完成。可以设置事务超时期间,计时是从事务开始时,所以这个设置必须搭配传播行为PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW、PROPAGATION_NESTED来设置。事务的超时属性(单位为秒)以timeout_为前缀和一个整型数字定义。 例: prop key=query*PROPAGATION_REQUIRED,timeout_5/prop TransactionDefinition org.springframework.transaction.interceptor
文档评论(0)