- 浏览: 1247361 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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集成
TransactionTemplate的灵活性好,可以给代码块加事务处理,而不是方法粒度的控制。
FruitShop实现:
beans-fruitshop.xml文件加入:
JdbcFruitShopTest类加入:
附:
1. 可以直接注入TransactionTemplate实例,不用在代码中实例化:
去除PlatformTransactionManager属性,直接使用TransactionTemplate属性:
beans-fruitshop.xml加入:
2. execute方法可以接受TransactionCallback接口的抽象类,如TransactionCallbackWithoutResult:
看下其实现:
接口方法中抽出一个没有返回结果的抽象方法(由用户自己实现),返回null是为了适配接口。
FruitShop实现:
public class TxTemplateJdbcFruitShop extends JdbcDaoSupport implements FruitShop { private PlatformTransactionManager txManager; public void setTxManager(PlatformTransactionManager txManager) { this.txManager = txManager; } @Override public boolean purchase(final int fruitId, final String userName, final int count) { TransactionTemplate txTemplate = new TransactionTemplate(txManager); final String querySql = "SELECT PRICE FROM FRUIT WHERE ID = ?"; final String upStockSql = "UPDATE FRUIT_STOCK SET STOCK = STOCK - ? WHERE ID = ?"; final String upAccountSql = "UPDATE ACCOUNT SET BALANCE = BALANCE - ? WHERE USERNAME = ?"; int retVal = txTemplate.execute(new TransactionCallback<Integer>() { @Override public Integer doInTransaction(TransactionStatus status) { int price = getJdbcTemplate().queryForInt(querySql, new Object[] { fruitId }); getJdbcTemplate().update(upStockSql, new Object[] { count, fruitId }); getJdbcTemplate().update(upAccountSql, new Object[] { price * count, userName }); return 1; } }); return retVal == 1; } }
beans-fruitshop.xml文件加入:
<bean id="txTemplateFruitShop" class="com.john.tx.service.impl.TxTemplateJdbcFruitShop"> <property name="dataSource" ref="dataSource" /> <property name="txManager" ref="txManager" /> </bean>
JdbcFruitShopTest类加入:
@Resource(name = "txTemplateFruitShop") FruitShop txTemplateFruitShop; @Test public void txTemplateTest() { int fruitId = 1; String userName = "user1"; int count = 3; txTemplateFruitShop.purchase(fruitId, userName, count); }
附:
1. 可以直接注入TransactionTemplate实例,不用在代码中实例化:
去除PlatformTransactionManager属性,直接使用TransactionTemplate属性:
private TransactionTemplate txTemplate; public void setTxTemplate(TransactionTemplate txTemplate) { this.txTemplate = txTemplate; }
beans-fruitshop.xml加入:
<bean id="txTemplate" class="org.springframework.transaction.support.TransactionTemplate"> <property name="transactionManager" ref="txManager" /> </bean> <bean id="txTemplateFruitShop" class="com.john.tx.service.impl.TxTemplateJdbcFruitShop"> <property name="dataSource" ref="dataSource" /> <property name="txTemplate" ref="txTemplate" /> </bean>
2. execute方法可以接受TransactionCallback接口的抽象类,如TransactionCallbackWithoutResult:
txTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus status) { ... } });
看下其实现:
接口方法中抽出一个没有返回结果的抽象方法(由用户自己实现),返回null是为了适配接口。
public abstract class TransactionCallbackWithoutResult implements TransactionCallback<Object> { public final Object doInTransaction(TransactionStatus status) { doInTransactionWithoutResult(status); return null; // 返回null } // 抽象方法,需要自定义实现 protected abstract void doInTransactionWithoutResult(TransactionStatus status); }
发表评论
-
本地事务系列之五:使用Transactional注解
2014-08-02 18:16 2831AOP的配置稍显复杂,通过@Transactional注解,同 ... -
本地事务系列之四:使用AOP
2014-08-02 17:08 903Spring AOP通过在文件中配置来管理事务,好处是对代码侵 ... -
本地事务系列之二:使用PlatformTransactionManager
2014-07-17 21:37 5394Spring的事务管理器接口: public interf ... -
本地事务系列之一:JDBC操作
2014-07-08 23:04 1233本地事务即对一个数据源进行操作。大多数数据库支持事务。 先看 ... -
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 1674和前置通知类似, 通过实现org.springframewor ... -
Spring AOP系列之四:前置通知
2014-04-13 21:28 1829通过实现org.springframework.aop.M ... -
Spring AOP系列之三:环绕代理
2014-04-13 18:20 1422通过实现org.aopalliance.intercept.M ... -
Spring AOP系列之二:Java代理
2014-04-13 18:00 1051通过Java代理的方式: 汽车的代理,需要实现java.la ... -
Spring AOP系列之一:手动方式
2014-04-13 17:44 1389AOP (Aspect Oriented Progra ... -
HibernateTemplate 使用
2014-03-03 22:09 01. queryListBySql hibernateTe ... -
Spring的组件扫描
2017-09-16 21:58 1066Spring2.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 17751. 往pom.xml文件添加以下依赖: <depe ... -
Spring配置中的bean引用其它bean的属性值
2013-01-23 15:24 4227这项功能在spring的3.0版本以上才支持,如果使用较早的版 ... -
spring JPA struts 整合开发(2) - spring集成struts
2012-05-20 20:55 1432一. spring JPA struts 整合开发(1) - ... -
spring JPA struts 整合开发(1) - spring集成JPA
2012-05-20 20:26 1704一. spring JPA struts 整合开发(1) - ...
相关推荐
本篇文章将聚焦于编程式事务管理,特别是如何通过`TransactionTemplate`进行事务控制。 1. **Spring编程式事务管理**: 编程式事务管理允许开发者在代码中直接控制事务的开始、提交、回滚等操作。这种方式提供了更...
在`MyTransactionTemplate.java`中,这是一个自定义的事务模板类,它继承自Spring的`TransactionTemplate`。这个类用于在非代理对象中进行事务操作,通常在AOP无法自动管理事务的场景下使用。你需要检查其中的`...
例如,使用Spring的PlatformTransactionManager接口,通过TransactionTemplate或直接在Service层使用@Transactional注解进行事务管理。 3. **声明式事务模型**:这是更推荐的方式,事务管理与业务逻辑分离,使得...
在Spring框架中,事务管理是核心功能之一,它允许开发者以声明式或编程式的方式处理事务。本篇文章将深入探讨“使用Spring的事务模板”这一主题,帮助你理解如何在应用中有效地管理事务。 首先,Spring事务管理有两...
3. **TransactionTemplate**: Spring提供的一个工具类,简化了编程式事务管理的代码,使得我们可以专注于业务逻辑而不是事务控制。通过设置TransactionDefinition和执行execute方法,我们可以在一个回调函数中编写...
8. **编程式事务管理**:通过TransactionTemplate或PlatformTransactionManager直接管理事务,需要在代码中显式控制事务的开始、提交、回滚。 9. **问题与解决**:在同一个类中,一个方法调用另一个方法时,AOP无法...
编程式事务管理使用 TransactionTemplate 或者直接使用底层的 PlatformTransactionManager。声明式事务管理有基于 tx 和 aop 名字空间的 xml 配置文件和基于 @Transactional 注解的方式。 为什么使用 Spring 来进行...
在Spring框架中,事务管理是核心功能之一,它确保了数据操作的一致性和完整性。本文将详细介绍Spring事务管理的四种方式:编程式事务管理、声明式事务管理、PlatformTransactionManager接口以及TransactionTemplate...
例如,你可以使用`TransactionTemplate`或直接调用`TransactionDefinition`和`TransactionStatus`来管理事务。以下是一个简单的编程式事务示例: ```java @Autowired private PlatformTransactionManager ...
这可能涉及到创建一个事务管理器实例,然后在业务方法中调用`TransactionTemplate`或者直接使用`PlatformTransactionManager`进行事务的开始、提交和回滚。 2. **声明式事务案例**:这个案例将展示如何在Service层...
- 编程式事务管理:使用TransactionTemplate或者PlatformTransactionManager接口直接进行事务控制。这种方式更灵活,可以精确控制事务的边界,但代码侵入性强,不易维护。 在实际开发中,通常结合这两种方式使用,...
例如,通过`TransactionTemplate`或者直接使用`TransactionStatus`接口来管理事务的生命周期。虽然这种方式提供了最大的灵活性,但会增加代码的复杂性,并且不易于维护。 2. **声明式事务管理**:这是Spring最常用...
在Spring框架中,编程式事务管理主要通过`org.springframework.transaction.support.TransactionTemplate`或`org.springframework.transaction.PlatformTransactionManager`来实现。 **示例代码分析**: 首先,...
例如,使用`TransactionTemplate`可以在模板类中处理事务逻辑,或者直接调用`TransactionManager`的`beginTransaction()`, `commit()`和`rollback()`方法。 2. **声明式事务管理**:这是Spring更推荐的方式,通过...
使用`TransactionTemplate.execute`方法,我们可以传递一个事务回调函数。这个回调函数将在事务的边界内执行,如果发生异常,事务将被回滚;否则,事务将在回调函数执行完毕后正常提交。例如: ```java ...
- **事务模板**:TransactionTemplate是编程式事务管理的一个工具类,它提供了一种简单的方式来包装数据库操作。类似于JdbcTemplate,TransactionTemplate也处理了事务的开始、提交和回滚。 - **异常回滚规则**:...
2. **编程式事务管理**:使用 TransactionTemplate 或直接操作 TransactionManager 接口进行事务控制,虽然灵活性较高,但可能导致事务控制代码与业务代码混杂。 Spring 事务管理涉及到的主要接口有: - **...
在Spring中,可以使用`@Transactional`注解的`propagation`属性配合`TransactionTemplate`进行更安全的编程式事务管理。 2. **声明式事务管理**: 声明式事务管理是Spring的核心特性之一,它通过AOP(面向切面编程...
编程式事务管理需要在代码中手动调用`TransactionTemplate`或`PlatformTransactionManager`的API来开始、提交、回滚事务,而声明式事务管理则更倾向于面向切面编程(AOP)的方式,通过配置来定义事务的边界。...