Spring 事务管理高级应用难点剖析,第 1 部分
2010-03-22 00:00:00 来源:WEB开发网PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与 PROPAGATION_REQUIRED 类似的操作。
Spring 默认的事务传播行为是 PROPAGATION_REQUIRED,它适合于绝大多数的情况。假设 ServiveX#methodX() 都工作在事务环境下(即都被 Spring 事务增强了),假设程序中存在如下的调用链:Service1#method1()->Service2#method2()->Service3#method3(),那么这 3 个服务类的 3 个方法通过 Spring 的事务传播机制都工作在同一个事务中。
下面,我们来看一下实例,UserService#logon() 方法内部调用了 UserService#updateLastLogonTime() 和 ScoreService#addScore() 方法,这两个类都继承于 BaseService。它们之间的类结构说明如下:
图 1. UserService 和 ScoreService
具体的代码如下所示:
清单 9 UserService.java
@Service("userService")
public class UserService extends BaseService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private ScoreService scoreService;
public void logon(String userName) {
updateLastLogonTime(userName);
scoreService.addScore(userName, 20);
}
public void updateLastLogonTime(String userName) {
String sql = "UPDATE t_user u SET u.last_logon_time = ? WHERE user_name =?";
jdbcTemplate.update(sql, System.currentTimeMillis(), userName);
}
}
- ››Spring源码学习-含有通配符路径解析(上)
- ››高级SEO的涵义意味着是什么
- ››Spring MVC与JAX-RS比较与分析
- ››Spring 框架的设计理念与设计模式分析
- ››Spring Web Flow 2 中流管理的持久化
- ››Spring 事务管理高级应用难点剖析: 第 2 部分
- ››Spring 事务管理高级应用难点剖析: 第 3 部分
- ››Spring 事务管理高级应用难点剖析,第 1 部分
- ››高级 DBA 和开发者篇,第 3 章:DB2 高可用性灾难...
- ››高级 DBA 和开发者篇,第 1 章:DB2 基础
- ››高级 DBA 和开发者篇,第 2 章:数据库集群技术
- ››Spring之@Autowired问题
更多精彩
赞助商链接