- 浏览: 1238181 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (193)
- ant/maven (6)
- algorithm (5)
- tomcat/weblogic/jboss (6)
- javascript/jquery (13)
- java (33)
- flex/flash (0)
- JPA/Hibernate/myBatis (18)
- java concurrent (7)
- test (2)
- windows/linux (6)
- java collection (7)
- design pattern (2)
- life/health (3)
- database (12)
- IDE (4)
- spring/ejb (20)
- html/css/ckeditor (7)
- jsp/servlet (3)
- java io (13)
- java security (4)
- jni (0)
- svn/git (2)
- english (2)
- java jmx (1)
- xml (1)
- struts/springmvc (9)
- middleware (2)
- cache (1)
- cglib (3)
最新评论
-
jlotusYo:
博主,真感谢。
Java 密码扩展无限制权限策略文件 -
senninha:
这个。。是api说明吧。。
ScheduledExecutorService 源码分析 -
zoutao2008:
请问大文件如何处理?按你这种方式的话,文件超过200M时就会报 ...
hessian系列之二:上传文件 -
lwj1113:
lwj1113 写道谢谢博主这么细致的demo;在系列五中通过 ...
myBatis系列之五:与Spring3集成 -
lwj1113:
谢谢博主这么细致的demo;在系列五中通过testng测试类跑 ...
myBatis系列之五:与Spring3集成
Spring的事务管理器接口:
Spring提供的实现
这里是单数据源,可以使用DataSourceTransactionManager:
FruitShop实现类:
beans-fruitshop.xml文件:
测试:
public interface PlatformTransactionManager { TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; // 获取事务状态 void commit(TransactionStatus status) throws TransactionException; // 提交事务 void rollback(TransactionStatus status) throws TransactionException; // 回滚事务 }
Spring提供的实现
这里是单数据源,可以使用DataSourceTransactionManager:
FruitShop实现类:
public class TransactionalApiJdbcFruitShop extends JdbcDaoSupport implements FruitShop { private PlatformTransactionManager txManager; public void setTxManager(PlatformTransactionManager txManager) { this.txManager = txManager; } @Override public boolean purchase(int fruitId, String userName, int count) { TransactionDefinition definition = new DefaultTransactionDefinition(); TransactionStatus status = txManager.getTransaction(definition); String querySql = "SELECT PRICE FROM FRUIT WHERE ID = ?"; String upStockSql = "UPDATE FRUIT_STOCK SET STOCK = STOCK - ? WHERE ID = ?"; String upAccountSql = "UPDATE ACCOUNT SET BALANCE = BALANCE - ? WHERE USERNAME = ?"; try { int price = getJdbcTemplate().queryForInt(querySql, new Object[] { fruitId }); getJdbcTemplate().update(upStockSql, new Object[] { count, fruitId }); getJdbcTemplate().update(upAccountSql, new Object[] { price * count, userName }); txManager.commit(status); } catch (DataAccessException e) { txManager.rollback(status); throw e; } catch (TransactionException e) { txManager.rollback(status); throw e; } return true; } }
beans-fruitshop.xml文件:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/spring?characterEncoding=utf8" /> <property name="username" value="spring" /> <property name="password" value="123456" /> </bean> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="txApiFruitShop" class="com.john.tx.service.impl.TransactionalApiJdbcFruitShop"> <property name="dataSource" ref="dataSource" /><!--JdbcDaoSupport的子类需要指定dataSource--> <property name="txManager" ref="txManager" /> </bean>
测试:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:/beans-fruitshop.xml" }) public class JdbcFruitShopTest { @Resource(name = "txApiFruitShop") FruitShop txApiFruitShop; @Test public void txApiTest() { int fruitId = 1; String userName = "user1"; int count = 3; txApiFruitShop.purchase(fruitId, userName, count); } }
发表评论
-
本地事务系列之五:使用Transactional注解
2014-08-02 18:16 2781AOP的配置稍显复杂,通过@Transactional注解,同 ... -
本地事务系列之四:使用AOP
2014-08-02 17:08 865Spring AOP通过在文件中配置来管理事务,好处是对代码侵 ... -
本地事务系列之三:使用TransactionTemplate
2014-07-17 22:15 6690TransactionTemplate的灵活性好,可以给代码块 ... -
本地事务系列之一:JDBC操作
2014-07-08 23:04 1206本地事务即对一个数据源进行操作。大多数数据库支持事务。 先看 ... -
Spring AOP 源码系列:ProxyFactoryBean
2014-04-21 18:01 0public class ProxyFactoryBean ... -
Spring AOP 源码系列
2014-04-21 09:22 0Spring AOP通过JDK的正则表达式对Pointcut表 ... -
Spring AOP系列之五:后置通知
2014-04-14 08:59 1635和前置通知类似, 通过实现org.springframewor ... -
Spring AOP系列之四:前置通知
2014-04-13 21:28 1791通过实现org.springframework.aop.M ... -
Spring AOP系列之三:环绕代理
2014-04-13 18:20 1385通过实现org.aopalliance.intercept.M ... -
Spring AOP系列之二:Java代理
2014-04-13 18:00 1018通过Java代理的方式: 汽车的代理,需要实现java.la ... -
Spring AOP系列之一:手动方式
2014-04-13 17:44 1354AOP (Aspect Oriented Progra ... -
HibernateTemplate 使用
2014-03-03 22:09 01. queryListBySql hibernateTe ... -
Spring的组件扫描
2017-09-16 21:58 1025Spring2.0以后的版本中,引入了基于注解(Annotat ... -
ContextLoaderListener和ContextCleanupListener源码分析
2013-12-18 15:55 0public class ContextLoaderLis ... -
Cglib2AopProxy 源码分析
2013-12-05 14:30 0final class Cglib2AopProxy im ... -
Spring生命周期方法的调用顺序
2013-11-19 22:04 0Spring的几个接口: BeanFactoryAware: ... -
一、Spring AOP的简单实例
2013-11-06 23:31 17321. 往pom.xml文件添加以下依赖: <depe ... -
Spring配置中的bean引用其它bean的属性值
2013-01-23 15:24 4182这项功能在spring的3.0版本以上才支持,如果使用较早的版 ... -
spring JPA struts 整合开发(2) - spring集成struts
2012-05-20 20:55 1388一. spring JPA struts 整合开发(1) - ... -
spring JPA struts 整合开发(1) - spring集成JPA
2012-05-20 20:26 1673一. spring JPA struts 整合开发(1) - ...
相关推荐
Spring事务管理高层抽象主要包括3个接口...1.PlatformTransactionManager//事务管理器 真正用来管理事务的接口,包含事务提交和回滚等信息; Spring为不同的持久层框架提供不同的PlatformTransactionManager接口实现;
如下图所示: Spring事务管理的三个核心接口 5.1.1 事务管理的核心接口 1.Platform TransactionManager PlatformTransactionManager接口是Spring提供的平台事务管理器,主要用于管理事务。该接口中提供了三个事务
事务功能的总体接口设计先来看下三大接口PlatformTransactionManager : 事务管理器TransactionDefinition : 事务的
1)、事务增强器要用事务注解的信息,AnnotationTransactionAttributeSource解析事务注解 2)、事务拦截器: TransactionInterceptor;保存了事务属性信息,事务管理器; 他是一个 MethodInterceptor; 在目标...
PlatFormTransactionManager:平台事务管理器:定义了commit/rollback Mybatis/jdbc:DataSourceTransactionManager Hibernater:HibernaterTransactionManager TransactionManagerDifinition 传播行为:A-->B,...
Spring事务管理4种方式 入门级 最简单demo PlatformTransactionManager TransactionTemplate
9.6.2. 使用 PlatformTransactionManager 9.7. 选择编程式事务管理还是声明式事务管理 9.8. 与特定应用服务器集成 9.8.1. BEA WebLogic 9.8.2. IBM WebSphere 9.9. 公共问题的解决方案 9.9.1. 对一个特定的 ...
9.6.2. 使用PlatformTransactionManager 9.7. 选择编程式事务管理还是声明式事务管理 9.8. 与特定应用服务器集成 9.8.1. IBM WebSphere 9.8.2. BEA WebLogic 9.8.3. Oracle OC4J 9.9. 常见问题的解决方法 ...
9.6.2. 使用PlatformTransactionManager 9.7. 选择编程式事务管理还是声明式事务管理 9.8. 与特定应用服务器集成 9.8.1. IBM WebSphere 9.8.2. BEA WebLogic 9.8.3. Oracle OC4J 9.9. 常见问题的解决方法 ...
9.6.2. 使用 PlatformTransactionManager 9.7. 选择编程式事务管理还是声明式事务管理 9.8. 与特定应用服务器集成 9.8.1. BEA WebLogic 9.8.2. IBM WebSphere 9.9. 公共问题的解决方案 9.9.1. 对一个特定的 ...
9.6.2. 使用 PlatformTransactionManager 9.7. 选择编程式事务管理还是声明式事务管理 9.8. 与特定应用服务器集成 9.8.1. BEA WebLogic 9.8.2. IBM WebSphere 9.9. 公共问题的解决方案 9.9.1. 对一个特定的 ...
PlatformTransactionManager接口(平台事务管理器接口),不管使用哪种方式管理事务,这个类必须配置的!!
3.1平台事务管理器PlatformTransactionManager主要定义了各个不同的数据库平台的一些接口,针对不同的数据库平台进行事务管理org.spr
这是一种基于数据库表和本地线程池的队列机制。 用法 DbQueue 与 Spring 紧密耦合,特别是它可以利用 Spring 的PlatformTransactionManager抽象。 使用 DbQueue 如下: 根据给定的liquibase.xml文件创建Queue...
主要介绍了spring 自动装配和aop的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
PlatformTransactionManager PluggableSchemaResolver Pointcut PointcutAdvisor PointcutComponentDefinition PointcutEntry Pointcuts PoolingConfig PortletApplicationContextUtils ...
Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................
Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................