FROM:http://hua3392.blog.163.com/blog/static/8630511920091013112859610/
Spring 事务配置例:
<!-- hibernate事务管理 器-->
<bean id="myTransactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<!-- springmvc事务管理 器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 声明式事务管理 -->
<!-- 事务拦截器 -->
<bean id="myTransactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="myTransactionManager"/>
</property>
<property name="transactionAttributes">
<!-- 下面定义事务传播属性-->
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- BeanNameAutoProxyCreator 自动生成事务代理-->
<bean id="autoProxyCreator"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="interceptorNames">
<list>
<value>myTransactionInterceptor</value>
</list>
</property>
<property name="beanNames">
<list>
<value>ProductService</value>
<value>PersonService</value>
<!-- 在此添加Bean -->
</list>
</property>
</bean>
<!-- 应用BEAN配置 -->
<bean id="PersonDAO" class="com.myweb.object.person.PersonDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="myPersonServiceTarget" class="com.myweb.object.person.PersonServiceImpl">
<property name="dao">
<ref bean="PersonDAO"/>
</property>
</bean>
<bean id="PersonService" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.myweb.object.person.PersonService</value>
</property>
<property name="interceptorNames">
<list>
<value>myHibernateInterceptor</value>
<value>myPersonServiceTarget</value>
</list>
</property>
</bean>
<bean id="ProductDAO" class="com.myweb.object.product.ProductDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="ProductService" class="com.myweb.object.product.ProductService">
<property name="dao">
<ref bean="ProductDAO"/>
</property>
</bean>
在ProductService和PersonService的update*等方法中,不能对RuntimeException异常进行处理,否则事物不会回滚.
public void updateName()
{
for(int i=0;i<10;i++)
{
PersonId personid = new PersonId();
personid.setId(27);
personid.setAge(i+10+"");
personid.setName("test"+i);
Person person = new Person();
person.setId(personid);
dao.save(person);
int j = 1/0; //不能对该异常用try...catch处理,否则不会回滚事务
}
}
public static void main(String[] args)
{
try
{
ApplicationContext ctx = new FileSystemXmlApplicationContext("WebRoot/WEB-INF/classes/applicationContext.xml");
PersonService per = (PersonService)ctx.getBean("PersonService");
ProductService pro = (ProductService)ctx.getBean("ProductService");
per.updateName();
//pro.updateName();
}catch(Exception e)
{
e.printStackTrace();
}
}
相关推荐
总之,这个“spring简单实例 事务回滚”案例为我们提供了一个学习Spring事务管理的好起点。通过理解如何配置事务管理器,使用`@Transactional`注解,以及异常处理机制,我们可以更好地掌握Spring如何保证数据的一致...
花了一晚上时间终于搞出来了Spring整合Mybatis事务回滚(Mysql数据库),控制Service层中的多次插入操作,多次操作整体是一个事务。 里面有缘嘛和jar包,资源为war包,导入即可。运行Test类中的测试代码即可。 建表...
我们将深入探讨Spring事务管理的原理、API使用以及在实际开发中的应用。 首先,Spring事务管理有编程式和声明式两种方式。编程式事务管理通过`PlatformTransactionManager`接口和`TransactionDefinition`接口来实现...
以上就是Spring、SpringMVC和MyBatis整合及事务回滚的基础知识。这个主题涉及到的技能涵盖了Java Web开发的核心部分,对提升开发者解决复杂业务问题的能力大有裨益。在实际开发中,你可能还需要考虑更多细节,如性能...
子线程任务发生异常,主线程事务如何回滚? 本文将详细探讨当子线程任务发生异常时,如何让主线程捕获到该异常并进行事务的回滚。下面将从多线程编程的基础知识、线程池的使用、异常捕获三个方面进行阐述。 一、多...
在Spring框架中,`@Transactional`注解是用于标记事务管理的重要工具,它使得开发者能够方便地在代码中声明式地控制事务的...通过实例分析和源码阅读,我们可以更深入地理解Spring事务管理机制,提升我们的编程技能。
- 提供了跨数据源的事务回滚能力,简化了系统设计,降低了处理多数据源时的复杂性。在除了分布式事务外的大多数情况下,只需考虑这个机制,就能保证事务的正确性。 在多租户SaaS架构中,数据隔离至关重要。常见的...
在Spring框架中,事务管理是核心特性之一,用于确保数据操作的一致性和完整性。当一个方法(A方法)内部调用另一个方法(B方法)时,可能会遇到事务控制...这个示例代码对于理解和调试Spring事务管理的问题非常有帮助。
事务是指一组操作的集合,作为一个单元执行,如果其中任何一个操作失败,则整个事务回滚,保证数据的一致性。 在SpringBoot中,事务的使用需要在启动类上添加@EnableTransactionManagement注解,以开启事务支持。...
首先,Spring 默认只有在遇到未捕获的 `RuntimeException` 或其子类时才会触发事务回滚。这意味着,如果在业务代码中对异常进行了捕获并处理,而没有再抛出异常,那么事务将不会自动回滚。例如,在提供的代码实例中...
标题中提到的“Spring事务管理只对出现运行期异常进行回滚”这一特性是基于Java异常处理机制的。在Java中,异常分为两种类型:运行时异常(RuntimeException及其子类)和检查异常(CheckedException)。运行时异常是...
MySQL事务无法回滚的情况可能由多种因素引起,尤其是在配置如Hibernate、Spring或JDBC等框架时,如果一切看似正常,但事务处理仍然失效,我们应当深入检查数据库本身的特性和设置。首要的问题通常与所选用的表类型...
Spring事务管理操作方法 ------------------------ 在Spring中,事务管理操作方法可以分为两种:编程式的事务管理和声明式的事务管理。编程式的事务管理是通过手动编写代码来管理事务,而声明式的事务管理是通过...
#### Spring事务控制的基础概念 Spring框架支持两种类型的事务管理:编程式事务管理和声明式事务管理。 - **编程式事务管理**:通过编码的方式来管理事务,适用于需要细粒度控制的情况。 - **声明式事务管理**:...
Spring 异常捕获且回滚事务解决方案 在 Spring 框架中,异常捕获和回滚事务是非常重要的概念。今天,我们将讨论如何在 Spring 中捕获异常并回滚事务。 首先,让我们了解一下 Spring 的事务机制。当我们在 Spring ...
如果`methodB`的事务提交成功,但`methodA`的事务回滚,`methodB`的结果不会受到影响。 5. **PROPAGATION_NOT_SUPPORTED** `methodB`将以非事务方式执行。如果当前存在事务,那么`methodB`将导致该事务被挂起。这...
Spring 的事务管理机制是一种典型的策略模式,PlatformTransactionManager 代表事务管理接口,他并不知道底层如何管理事务,他只要求事务管理的实现类提供开始事务、提交事务、回滚事务等方法。 在 Spring 中,有...
浅谈Spring中@Transactional事务回滚及示例 @Transactional是Spring Framework中的一种事务管理机制,用于管理数据库事务。它可以使得数据库操作更加安全和可靠。本文将详细介绍@Transactional的使用场景、checked...
使用 SpringBoot 注解方式处理事务回滚实现 在本文中,我们将介绍使用 SpringBoot 注解方式处理事务回滚实现的方法,并通过示例代码进行详细的讲解。本文对于学习 SpringBoot 的开发者或者工作中需要实现事务回滚的...