Spring事务配置管理.ppt
Spring事务配置管理,张聪,UED Team Design,2009-7-24,枯燥的废话,什么是事务ACID原则(原子性atomicity、一致性consistency、隔离性isolation和持久性durability)Java事务的简单分类JDBC事务JTA事务容器事务,Spring事务管理,简单分类:编程式、声明式声明式事务的配置策略TransactionDefinitionTransactionProxyTransactionManagerDataSourceTransactionInterceptorTransactionAttributeSource,DataSource,JNDIDHCP,TransactionManager,TransactionManagerInterceptor,TransactionManagerProxy,TransactionAttributeSource,传播行为隔离层级只读提示事务超时,传播行为,PROPAGATION_MANDATORY:方法必须在一个现存的事务中进行,否则丢出异常PROPAGATION_NESTED:在一个嵌入的事务中进行,如果不是,则同PROPAGATION_REQUIREDPROPAGATION_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来设置。例:PROPAGATION_REQUIRED,readOnly,事务超时期间,有的事务操作可能延续很长一段的时间,事务本身可能关联到数据表的锁定,因而长时间的事务操作会有效率上的问题,对于过长的事务操作,考虑Roll back事务并要求重新操作,而不是无限时的等待事务完成。可以设置事务超时期间,计时是从事务开始时,所以这个设置必须搭配传播行为PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW、PROPAGATION_NESTED来设置。事务的超时属性(单位为秒)以timeout_为前缀和一个整型数字定义。例:PROPAGATION_REQUIRED,timeout_5,TransactionDefinition,TransactionDefinitionTransactionProxyTransactionManagerDataSourceTransactionInterceptorTransactionAttributeSource,