1.spring配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/util classpath:/org/springframework/beans/factory/xml/spring-util-3.0.xsd " default-autowire="byName"> <bean id="paymentSqlSqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation" value="classpath:sqlmap/sqlserver/sqlserver-consume.xml" /> <property name="dataSource" ref="paymentSqlDataSource" /> </bean> <!-- ============================ payment ======================================= --> <bean id="paymentSqlDataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${sqlserver.jdbc.driver}" /> <property name="url" value="${payment.sqlserver.jdbc.url}" /> <property name="username" value="${payment.sqlserver.jdbc.username}" /> <property name="password" value="${payment.sqlserver.jdbc.password}" /> <property name="maxActive" value="30" /> <property name="initialSize" value="2" /> <property name="maxWait" value="60000" /> <property name="maxIdle" value="30" /> <property name="minIdle" value="1" /> <property name="testOnBorrow" value="false"></property> <property name="testWhileIdle" value="true"></property> <property name="validationQuery" value="select 1 "></property> <property name="timeBetweenEvictionRunsMillis"> <value>300000</value> </property> <property name="numTestsPerEvictionRun"> <value>10</value> </property> <property name="minEvictableIdleTimeMillis" value="300000"></property> </bean> <bean id="consumeTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate" > <property name="sqlMapClient" ref="paymentSqlSqlMapClient" /> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="paymentSqlDataSource" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /> </beans>
2.代码中
package com.jd.consume.domain.consume.impl; import javax.annotation.Resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.jd.consume.domain.consume.ConsumeChange; import com.jd.consume.domain.model.ConsumeDetail; import com.jd.consume.domain.model.OrderTask; import com.jd.consume.infrastructure.repository.ConsumeRepository; import com.jd.consume.infrastructure.repository.OrderTaskRepository; /** * 消费额度变更服务 * @author guanpanpan * */ @Service(value = "consumeChange") @Transactional(value = "transactionManager", readOnly = true) public class ConsumeChangeImpl implements ConsumeChange { protected final static Logger log = LoggerFactory.getLogger(ConsumeChangeImpl.class); @Resource private OrderTaskRepository orderTaskRepository; @Resource private ConsumeRepository consumeRepository; public static boolean throwRuntimeExceptionInTransation = false; @Transactional(value = "transactionManager", readOnly = false, rollbackFor = Exception.class, propagation = Propagation.REQUIRED) public void addConsumeWithSingleTask(OrderTask orderTask) { ConsumeDetail consumeDetail = orderTask.genAddConsumeDetail(); consumeRepository.addConsumeDetail(consumeDetail); consumeRepository.addConsumeAmount(consumeDetail); //设置状态为已处理,如果失败会在回滚中置好状态 orderTaskRepository.updateCusumeStatus(orderTask.getId(), OrderTask.SYN_COMPLETE, OrderTask.SYN_LOCK); if (throwRuntimeExceptionInTransation) { throw new RuntimeException("rollBack in Test"); } } @Override @Transactional(value = "transactionManager", readOnly = false, rollbackFor = Exception.class, propagation = Propagation.REQUIRED) public void reduceConsumeWithSingleTask(OrderTask orderTask) { ConsumeDetail consumeDetail = orderTask.genPastOrderTask(); //设置状态为已处理,如果失败会在回滚中置好状态 orderTaskRepository.updatePastCusumeStatus(orderTask.getId(), OrderTask.PAST_DUE_YET, OrderTask.PAST_LOCK); consumeRepository.addConsumeDetail(consumeDetail); consumeRepository.addConsumeAmount(consumeDetail); if (throwRuntimeExceptionInTransation) { throw new RuntimeException("rollBack in Test"); } } }
相关推荐
在压缩包中的文件可能包含了Spring声明式事务处理的详细教程、实例代码和常见问题解答等内容。文件名为`Spring声明式事务处理-1.mht`到`Spring声明式事务处理-5.mht`,通过阅读这些文件,你将能够深入理解Spring声明...
5. **Transaction Management**:MyBatis-Spring 提供了与 Spring 事务管理的无缝集成,可以使用 Spring 的声明式事务管理来处理数据操作的事务。 在实际项目中,mybatis-spring-1.3.3.jar 包的使用步骤通常包括...
spring声明式事务实例 可复制修改使用。。。。。。。。。。
1. **自动事务管理**:整合Spring的声明式事务管理,使得在MyBatis中可以方便地进行事务控制。 2. **SqlSession管理**:避免手动创建和关闭SqlSession,自动在Spring的上下文中处理SqlSession生命周期。 3. **...
Mybatis-Spring与Spring的声明式事务管理结合,可以在服务层的方法上使用@Transactional注解,实现事务的自动开启、提交、回滚。 7. **SqlSessionTemplate和SqlSessionDaoSupport** 这两个类是Mybatis-Spring提供...
### 标题解读:Spring声明式事务配置 Spring框架提供了两种主要类型的事务管理方式:编程式事务管理和声明式事务管理。声明式事务管理通过XML配置或注解的形式定义事务边界,使得业务逻辑与事务控制分离。 ### ...
在Spring框架中,声明式事务管理是实现事务处理...在博文"Spring使用XML配置声明式事务"中,作者详细讲解了每个步骤,并可能通过示例代码展示了如何实际应用这些配置,帮助读者更好地理解和掌握Spring声明式事务管理。
5. **事务管理**: MyBatis-Spring提供了一种方式,将MyBatis的事务管理与Spring的声明式事务管理相结合,使得事务控制更加灵活和一致。 通过整合MyBatis和Spring,开发者可以充分利用Spring的依赖注入、AOP和事务...
4. **Transaction Management**:MyBatis-Spring与Spring的事务管理器配合,可以实现声明式事务管理。只需在Spring配置中定义一个PlatformTransactionManager,MyBatis-Spring就会自动将事务管理应用到所有数据库...
这包括声明式事务和编程式事务,可以根据项目的具体需求选择适合的方式。 5. **ExecutorType**: 在MyBatis-Spring中,可以通过Spring的事务配置来指定ExecutorType(执行器类型),如SIMPLE、REUSE或BATCH,这使得...
5. **Transaction Management**: MyBatis-Spring 与 Spring 的事务管理器集成,支持声明式事务管理。这意味着你可以利用 Spring 的事务注解(如 @Transactional)来控制事务边界,而无需在 DAO 层手动管理事务。 6....
2. **事务管理**:Spring提供声明式事务管理,可以在配置文件中定义事务边界,MyBatis-Spring会自动处理事务的提交和回滚,减少了手动处理事务的复杂性。 3. **MapperScannerConfigurer**:这是一个Spring配置类,...
- **事务管理**:MyBatis-Spring 可以配合 Spring 的事务管理器,提供声明式事务管理,使得事务的控制更加简单和统一。 在实际开发中,通过这两个 JAR 文件,开发者可以轻松地在 Spring 应用中使用 MyBatis 进行...
在 1.2.2 版本中,你可以利用 Spring 的声明式事务管理,只需在服务层的方法上添加 @Transactional 注解,就可以自动开启和提交事务,处理异常时进行回滚。 6. **SqlSessionTemplate 和 SqlSessionDaoSupport:** ...
5. **TransactionManagementConfigurer**: MyBatis-Spring支持Spring的声明式事务管理。通过实现TransactionManagementConfigurer接口,你可以配置事务边界和回滚规则,使得MyBatis操作能在Spring事务范围内进行。 ...
MyBatis-Spring 支持 Spring 的声明式事务管理。只需在 Spring 配置中定义一个事务管理器,例如 `PlatformTransactionManager`,就可以在 MyBatis-Spring 中启用事务控制。这使得事务边界可以跨越多个数据访问操作...
6. **事务管理**:Spring的事务管理支持编程式和声明式两种方式,可以处理复杂的事务边界,确保数据的一致性。 7. **Spring Boot**:Spring Boot简化了Spring应用的初始搭建和运行过程,它预设了许多默认配置,使得...
5. **TransactionManagement**: MyBatis-Spring支持Spring的声明式事务管理,使得事务的边界可以清晰地定义在Service层,提高了事务处理的灵活性和可维护性。 6. **ExecutorType**: 支持设置不同的Executor类型,...