- 浏览: 1248259 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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 2834AOP的配置稍显复杂,通过@Transactional注解,同 ... -
本地事务系列之四:使用AOP
2014-08-02 17:08 906Spring AOP通过在文件中配置来管理事务,好处是对代码侵 ... -
本地事务系列之三:使用TransactionTemplate
2014-07-17 22:15 6777TransactionTemplate的灵活性好,可以给代码块 ... -
本地事务系列之一:JDBC操作
2014-07-08 23:04 1237本地事务即对一个数据源进行操作。大多数数据库支持事务。 先看 ... -
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 1677和前置通知类似, 通过实现org.springframewor ... -
Spring AOP系列之四:前置通知
2014-04-13 21:28 1834通过实现org.springframework.aop.M ... -
Spring AOP系列之三:环绕代理
2014-04-13 18:20 1425通过实现org.aopalliance.intercept.M ... -
Spring AOP系列之二:Java代理
2014-04-13 18:00 1053通过Java代理的方式: 汽车的代理,需要实现java.la ... -
Spring AOP系列之一:手动方式
2014-04-13 17:44 1394AOP (Aspect Oriented Progra ... -
HibernateTemplate 使用
2014-03-03 22:09 01. queryListBySql hibernateTe ... -
Spring的组件扫描
2017-09-16 21:58 1069Spring2.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 17821. 往pom.xml文件添加以下依赖: <depe ... -
Spring配置中的bean引用其它bean的属性值
2013-01-23 15:24 4236这项功能在spring的3.0版本以上才支持,如果使用较早的版 ... -
spring JPA struts 整合开发(2) - spring集成struts
2012-05-20 20:55 1436一. spring JPA struts 整合开发(1) - ... -
spring JPA struts 整合开发(1) - spring集成JPA
2012-05-20 20:26 1708一. spring JPA struts 整合开发(1) - ...
相关推荐
2. 本地事务的实现:通过JDBC的Connection对象的commit()和rollback()方法来控制事务的开始、结束和回滚。然而,这种实现方式可能导致事务管理代码分散,不易维护。 3. 全局事务:JTA(Java Transaction API)提供了...
- Apache ShardingSphere:提供分布式事务解决方案,包括2PC、TCC、Saga和本地事务的代理模式。 3. **挑战与优化**: - 性能:分布式事务通常会引入额外的网络通信和协调开销,需要通过优化算法、减少事务粒度等...
在事务管理方面,Spring支持编程式和声明式事务,可以处理单个数据库的本地事务,以及跨多个数据源的分布式事务。 `Druid` 是阿里巴巴开源的一个高性能、可扩展的数据源连接池。它除了提供基础的连接池功能外,还...
8. **补偿事务(Saga)**:在微服务架构中,由于单个事务可能涉及多个服务,因此出现了Saga模式,它通过一系列小的本地事务来实现长事务,每个小事务称为一个补偿操作,如果前面的操作失败,后续的补偿操作将回滚...
- **事务管理**:提供了一套统一的事务管理API,支持本地和分布式事务。 - **模型-视图-控制器(Model-View-Controller, MVC)**:支持构建Web应用程序,分离业务逻辑与表示层。 #### 二、Spring IoC容器 **Spring...
JTXer可能包含了一系列示例代码,帮助开发者理解如何在Java应用中实现和管理事务,包括本地事务和分布式事务。这些示例可能会涵盖Spring框架中的PlatformTransactionManager接口、JTA(Java Transaction API)以及...
Spring还提供了一系列接口和类,如PlatformTransactionManager负责实际的事务管理,TransactionalEventListener用于监听事务相关的事件,以及TransactionDefinition和TransactionStatus接口,它们分别代表事务的定义...
在整合Hibernate时,我们可以配置PlatformTransactionManager(如HibernateTransactionManager),并通过@Transactional注解在服务层方法上启用事务管理。 4. **DAO(数据访问对象)层**:Spring整合Hibernate后,...
编程式事务管理使用 `PlatformTransactionManager` 接口,而声明式事务管理则基于 AOP,通过 `@Transactional` 注解实现。源码中,`TransactionDefinition` 和 `TransactionStatus` 描述了事务的属性和状态。 4. **...
使用 `@Transactional` 注解来声明式地管理事务,或者通过 `PlatformTransactionManager` 接口编程式地管理事务。 #### 53. 对Spring的AOP的理解 Spring AOP(Aspect Oriented Programming)提供了一种机制,用于...
PlatformTransactionManager 接口定义了一系列事务管理的基本操作,如 getTransaction、commit 和 rollback,而具体的事务管理策略则由不同的实现类来提供。这种设计允许用户根据应用的实际需求选择不同的事务管理...