`
guanpanpan
  • 浏览: 16713 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

代码实例-spring声明式事务

阅读更多

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声明式事务处理的详细教程、实例代码和常见问题解答等内容。文件名为`Spring声明式事务处理-1.mht`到`Spring声明式事务处理-5.mht`,通过阅读这些文件,你将能够深入理解Spring声明...

    mybatis-spring-1.3.3.jar官方下载

    5. **Transaction Management**:MyBatis-Spring 提供了与 Spring 事务管理的无缝集成,可以使用 Spring 的声明式事务管理来处理数据操作的事务。 在实际项目中,mybatis-spring-1.3.3.jar 包的使用步骤通常包括...

    Spring声明式事务

    spring声明式事务实例 可复制修改使用。。。。。。。。。。

    mybatis-spring-1.2.0.jar

    1. **自动事务管理**:整合Spring的声明式事务管理,使得在MyBatis中可以方便地进行事务控制。 2. **SqlSession管理**:避免手动创建和关闭SqlSession,自动在Spring的上下文中处理SqlSession生命周期。 3. **...

    Mybatis-Spring-1.2.2中文文档.zip

    Mybatis-Spring与Spring的声明式事务管理结合,可以在服务层的方法上使用@Transactional注解,实现事务的自动开启、提交、回滚。 7. **SqlSessionTemplate和SqlSessionDaoSupport** 这两个类是Mybatis-Spring提供...

    spring声明式事务配置

    ### 标题解读:Spring声明式事务配置 Spring框架提供了两种主要类型的事务管理方式:编程式事务管理和声明式事务管理。声明式事务管理通过XML配置或注解的形式定义事务边界,使得业务逻辑与事务控制分离。 ### ...

    Spring使用XML配置声明式事务

    在Spring框架中,声明式事务管理是实现事务处理...在博文"Spring使用XML配置声明式事务"中,作者详细讲解了每个步骤,并可能通过示例代码展示了如何实际应用这些配置,帮助读者更好地理解和掌握Spring声明式事务管理。

    mybatis-spring.jar整合包(包含两个版本,有源码jar包)

    5. **事务管理**: MyBatis-Spring提供了一种方式,将MyBatis的事务管理与Spring的声明式事务管理相结合,使得事务控制更加灵活和一致。 通过整合MyBatis和Spring,开发者可以充分利用Spring的依赖注入、AOP和事务...

    mybatis-spring最新整合包

    4. **Transaction Management**:MyBatis-Spring与Spring的事务管理器配合,可以实现声明式事务管理。只需在Spring配置中定义一个PlatformTransactionManager,MyBatis-Spring就会自动将事务管理应用到所有数据库...

    mybatis-spring-1.3.1

    这包括声明式事务和编程式事务,可以根据项目的具体需求选择适合的方式。 5. **ExecutorType**: 在MyBatis-Spring中,可以通过Spring的事务配置来指定ExecutorType(执行器类型),如SIMPLE、REUSE或BATCH,这使得...

    mybatis-spring-1.3.2.jar

    5. **Transaction Management**: MyBatis-Spring 与 Spring 的事务管理器集成,支持声明式事务管理。这意味着你可以利用 Spring 的事务注解(如 @Transactional)来控制事务边界,而无需在 DAO 层手动管理事务。 6....

    mybatis-Spring整合jar包

    2. **事务管理**:Spring提供声明式事务管理,可以在配置文件中定义事务边界,MyBatis-Spring会自动处理事务的提交和回滚,减少了手动处理事务的复杂性。 3. **MapperScannerConfigurer**:这是一个Spring配置类,...

    mybatis+mybatis-springjar包

    - **事务管理**:MyBatis-Spring 可以配合 Spring 的事务管理器,提供声明式事务管理,使得事务的控制更加简单和统一。 在实际开发中,通过这两个 JAR 文件,开发者可以轻松地在 Spring 应用中使用 MyBatis 进行...

    mybatis-spring-1.2.2

    在 1.2.2 版本中,你可以利用 Spring 的声明式事务管理,只需在服务层的方法上添加 @Transactional 注解,就可以自动开启和提交事务,处理异常时进行回滚。 6. **SqlSessionTemplate 和 SqlSessionDaoSupport:** ...

    mybatis-spring-1.2.1.zip

    5. **TransactionManagementConfigurer**: MyBatis-Spring支持Spring的声明式事务管理。通过实现TransactionManagementConfigurer接口,你可以配置事务边界和回滚规则,使得MyBatis操作能在Spring事务范围内进行。 ...

    mybatis-spring-1.0.1-bundle mybatis spring 官方下载

    MyBatis-Spring 支持 Spring 的声明式事务管理。只需在 Spring 配置中定义一个事务管理器,例如 `PlatformTransactionManager`,就可以在 MyBatis-Spring 中启用事务控制。这使得事务边界可以跨越多个数据访问操作...

    Pro-Spring-5英文版加源代码

    6. **事务管理**:Spring的事务管理支持编程式和声明式两种方式,可以处理复杂的事务边界,确保数据的一致性。 7. **Spring Boot**:Spring Boot简化了Spring应用的初始搭建和运行过程,它预设了许多默认配置,使得...

    mybatis-spring 1.2.0 jar包

    5. **TransactionManagement**: MyBatis-Spring支持Spring的声明式事务管理,使得事务的边界可以清晰地定义在Service层,提高了事务处理的灵活性和可维护性。 6. **ExecutorType**: 支持设置不同的Executor类型,...

Global site tag (gtag.js) - Google Analytics