Spring实战篇系列??Spring事务管理配置

Peggy ·
更新时间:2024-11-13
· 853 次阅读

  上篇说了aop的配置,并且说了spring事务管理是基于aop的,那么Spring声明式事务的配置有两种方式:XML配置及注解配置   不多说,直接看配置文件   一、配置文件   applicationContext-transaction.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd "> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 通知 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 传播行为 --> <tx:method name="save*" propagation="REQUIRED"/> <tx:method name="delete*" propagation="REQUIRED"/> <tx:method name="insert*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="list*" propagation="SUPPORTS" read-only="true"/> <tx:method name="get*" propagation="SUPPORTS" read-only="true"/> </tx:attributes> </tx:advice> <!-- aop --> <aop:config> <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.mango.jtt.service.*.*(..))"/> </aop:config> <!-- 注解管理事务 --> <tx:annotation-driven transaction-manager="transactionManager"/> </beans>   注解管理事务以上都是xml配置的事务,基于注解的事务,只需配置<tx:annotation-driven/>标签,然后在Spring bean中添加@Transational注解即可实现事务管理。   二,Spring事务管理本质   Spring并不直接管理事务,而是提供多种事务管理器,他们讲事务管理的职责委托给JAT或其他持久化机制所提供的平台相关的事务实现。上述配置文件中是利用的hibernate事务管理器实现的Hibernate事务管理。详细信息不说,想事务属性什么的,具体可参考spring in action及spring官方文档   三、继续说下事务对getCurrentSession的影响   在Spring实战篇系列----源码解析SessionFactory及Session的管理及getCurrentSession的使用 文章中说了getCurrentSession是要基于事务的,才能实现session的生命周期的管理。那么Spring的事务管理到底做了什么。   首先看事务管理器HibernateTransactionManager,它并没有做太多工作,一个空的构造函数及 /** * Create a new HibernateTransactionManager instance. * A SessionFactory has to be set to be able to use it. * @see #setSessionFactory */ public HibernateTransactionManager() { }   及afterPropertiesSet()方法 @Override public void afterPropertiesSet() { if (getSessionFactory() == null) { throw new IllegalArgumentException("Property 'sessionFactory' is required"); } if (this.entityInterceptor instanceof String && this.beanFactory == null) { throw new IllegalArgumentException("Property 'beanFactory' is required for 'entityInterceptorBeanName'"); } // Check for SessionFactory's DataSource. if (this.autodetectDataSource && getDataSource() == null) { DataSource sfds = SessionFactoryUtils.getDataSource(getSessionFactory()); if (sfds != null) { // Use the SessionFactory's DataSource for exposing transactions to JDBC code. if (logger.isInfoEnabled()) { logger.info("Using DataSource [" + sfds + "] of Hibernate SessionFactory for HibernateTransactionManager"); } setDataSource(sfds); } } }



spring spring事务管理

需要 登录 后方可回复, 如果你还没有账号请 注册新账号