-
脏读:一个事务读到了另一个事务没有提交的数据 不可重复读: 幻读:查看全部
-
事务传播行为查看全部
-
转账程序开发步骤: 1.定义业务接口和持久层数据库接口 2.接口实现类 3.写配置文件,加载数据库设置参数文件,创建连接池,初始化实现类的实例查看全部
-
事务的特性查看全部
-
spring 声明事务管理,编程事务管理查看全部
-
Spring事务管理分类查看全部
-
Spring事务管理总结:查看全部
-
基于Annotation的声明式事务管理: Spring 2在jdk5及其以上版本,提供了Annotation注解的方式来配置事务,提供了@Transactional注解进行事务管理,该注解可以标注在类与方法上.使用注解方式就避免了配置文件的书写. 在进行事务管理的类上使用@Transactional注解标注或在需要进行事务管理的方法体上使用@Transactional注解标注都可完成事务管理. 当@Transactional注解标注在类上,那么该类的所有方法都被设置了事务. 当@Transactional注解标注在某个方法上,那么只有该方法设置了事务. 该注解中有多个可选属性: propagation、isolation、timeout、readOnly(布尔类型)、rollbackFor、noRollbackFor 配置传播行为与隔离级别时不能省略PROPAGATION_、ISOLATION_前缀(基于XML Schema方式可以). 当没有为@Transactional注解赋值时,会采用默认的事务属性值. 使用Annotation配置事务需要在配置文件中加上<tx:annotation-driven transaction-manager=""/>标签,并引入事务管理器. 测试类中直接获取Service对应的bean即可,不再需要设置代理对象,因为这是自动代理的方式. 例子: public class ServiceImpl{ @Autowired private Dao dao; @Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT,readOnly=true,timeout=30) public void transfer(String out,String in ,Double money){ dao.outMoney(out,money); dao.inMoney(in,money); } } 配置文件中配置<tx:annotation-driven transaction-manager="" />标签即可.查看全部
-
基于XML Schema声明式事务管理的配置: //配置事务管理器: <bean id="tranM" class="..DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> //数据源: <bean id="dataSource" class=".."> .. </bean> //设置事务: <tx:advice id="txAdvice" transaction-manager="tranM"> <tx:attributes> <tx:method name="insert*" propagation="REQUIRED" isolation="DEFAULT"/> </tx:attributes> </tx:advice> //最后结合<aop:config>来配置事务: <aop:config> //定义切入点 <aop:pointcut id="pointcut" expression="execution(* com.own.Service.*(..))"/> //配置切面 <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut" /> </aop:config> 这里<aop:config>中的<aop:advisor>引用的advice就是<tx:advice>的一个实例. 切入点才是正在执行事务的地方,此处切入点的范围是Service层,那么Service层的所有方法都会被设置事务,如果在<tx:method>标签中为某些方法定义了事务属性,那么该方法就用此标签定义好的事务属性,其他符合切入点但没有被定义事务属性的方法就用默认的事务属性. 测试类中直接获取Service对应的bean即可,不再需要设置代理对象,因为这是自动代理的方式. 不管使用哪一种声明式事务管理,都要在XML中配置数据源与事务管理器. <aop:advisor>标签通常与事务结合使用.查看全部
-
基于XML Schema的声明式事务管理 传统的声明式事务管理需要为每一个Service类定义一个TransactionProxyFactoryBean,通常很少用此方法. Spring2.0中就可以不用TransactionProxyFactoryBean来管理事务,它提供了Schema,使用<tx:advice>标签结合AOP就可以实现事务管理. 首先要在<beans..>中添加新的约束. <tx:advice transaction-manager="">标签表示一个事务advice,它需要设置一个TransactionManager属性. 在<tx:advice>标签下使用<tx:attributes>标签来声明事务的相关属性配置. 在<tx:attributes>标签下可以配置多个<tx:method name="" propagation="" isolation="">标签来为指定方法定义事务属性.<tx:method>标签中可以配置propagation、isolation、timeout、read-only、rollback-for、noRollback-for属性. name:指定需要设置事务的方法.支持通配符. propagation:传播行为,赋值时不需要加PROPAGATION_前缀了,直接REQUIRED即可. isolation:隔离级别,赋值时同样不需要前缀了. timeout:超时秒数,默认事务不会超时,一旦事务在设定的时间内没有结束则执行一个新的动作. read-only:事务是否只读. rollback-for:需要回滚的异常,字符数组类型,多个异常用逗号隔开.即{exception1,exception2..} noRollball-for:不需要回滚的异常,也是数组类型.查看全部
-
<props>标签与<list>标签是同一个意思.都是为这种类型属性赋值.<props>标签下可以有多个<prop key="" value="">标签. 在Spring的tx.jar源码中可以看到transactionAttributes属性是Properties类型.并设置了key与value的作用. key值代表需要为被代理对象的哪些方法进行事务管理,直接写方法名即可,支持通配符. value值来定义事务的属性,包括隔离级别,传播行为,只读,异常等.多个属性之间用逗号隔开. 此<prop>标签的value取值: PROPAGATION:事务的传播行为 ISOLATION:事务的隔离级别 readyOnly:只读(不可以进行修改,插入,删除的操作) -Exception:发生哪些异常回滚事务,默认全部异常. +Exception:发生哪些异常不回滚事务并立即提交事务,但是会出现数据丢失的情况,和没有设置事务的效果一样. 即: <property name="transactionAttributes"> <props> <prop key="insert*">PROPAGATION_REQUIRED,readyOnly</prop> <prop key="save*">PROPAGATION_REQUIRED,+java.lang.ArithmeticException</prop> //设置了算术异常,当调用该方法发生此异常时会立即提交事务,会出现数据丢失的问题.即: service.outMoney(); int d=1/0; service.inMoney(); </props> </property> 被代理类一般是Service接口的实现类,代理类是TransactionProxyFactoryBean,通过代理类来对被代理类进行增强,在测试类中通过getBean("代理类")强转为被代理类来使用. 当设置了事务为只读,那么如果事务中有修改数据库的操作是不会被执行的,并且会发生一个异常. 使用传统的声明式事务管理,如果Service没有定义接口,那么就使用CGLIB的方式动态代理.查看全部
-
声明式的事务管理(传统方式) 声明式的事务管理是基于AOP的思想完成的.因此需要引用Spring AOP开发需要用到的jar包. 传统的声明式事务管理: 1.配置事务管理器 <bean id="transactionManager" class="..DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <bean id="dataSource" class="..">..</bean> 有了连接池才能获取连接,才能够进行事务管理.JdbcTemplate也一样的道理. 2.引用TransactionProxyFactoryBean,TransactionProxyFactoryBean是采用动态代理完成事务管理的,直接配置一个TransactionProxyFactoryBean即可. TransactionProxyFactoryBean中有4个属性,分别是proxyInterfaces、target、transactionManager、transactionAttributes属性. proxyInterfaces:该属性配置需要代理的接口 target:该属性配置proxyInterfaces中指定接口的实现类 transactionManager:该属性指定一个TransactionManager transactionAttributes:该属性指定需要设置proxyInterfaces的接口中需要添加事务的的方法.支持<props>多个配置.因为此属性是Properties类型(java.util.Properties).此类型是键值对的形式.查看全部
-
事务传播行为查看全部
-
事务隔离级别查看全部
-
声明式查看全部
举报
0/150
提交
取消