spring 的事务问题,事务失效,事务传播
2016-04-27 19:09
756 查看
1:同一个类,如下图,我们调 service.methodA(),这时的话 methodA和 methodB都在 A定义的 事务内,只有在methodA 的方法里throws RuntimeException 时 才会回滚,methodA和methodB都会回滚。(注意:如果methodB抛出RuntimeException,但是methodA中把这种异常捕获,并让程序正常运行,则都不会发生回滚。)
[java] view
plain copy
Service {
@Transactional
void methodA() {
4000
methodB();
}
void methodB(){
}
}
2:如下图,我们调 service.methodA(), methodB上面的事务是不生效(其他的几个注解也不会生效)。可以简单的这么理解:spring 无法找到methodB 这个切面,无法收到事务通知。具体解释见下面的博客:http://blog.csdn.net/seelye/article/details/40144817
[java] view
plain copy
Service {
void methodA() {
methodB();
}
@Transactional
void methodB(){
}
}
3:正常的话,我们两个方法都定义事务的话,就要把这两个方法放在不同的service里面。如下面:
可以把方法B放到另外一个service或者dao,然后把这个server或者dao通过@Autowired注入到方法A的bean里面,这样即使方法A没用事务,方法B也可以执行自己的事务了。AOP就是这么玩的!
[java] view
plain copy
ServiceA {
void methodA() {
ServiceB.methodB();
}
}
ServiceB {
void methodB() {
}
}
4:
[java] view
plain copy
Service {
@Transactional
void methodA() {
4000
methodB();
}
void methodB(){
}
}
2:如下图,我们调 service.methodA(), methodB上面的事务是不生效(其他的几个注解也不会生效)。可以简单的这么理解:spring 无法找到methodB 这个切面,无法收到事务通知。具体解释见下面的博客:http://blog.csdn.net/seelye/article/details/40144817
[java] view
plain copy
Service {
void methodA() {
methodB();
}
@Transactional
void methodB(){
}
}
3:正常的话,我们两个方法都定义事务的话,就要把这两个方法放在不同的service里面。如下面:
可以把方法B放到另外一个service或者dao,然后把这个server或者dao通过@Autowired注入到方法A的bean里面,这样即使方法A没用事务,方法B也可以执行自己的事务了。AOP就是这么玩的!
[java] view
plain copy
ServiceA {
void methodA() {
ServiceB.methodB();
}
}
ServiceB {
void methodB() {
}
}
4:
Spring中事务的定义:
Propagation(key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。)有以下选项可供使用:
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring和ThreadLocal
- Spring Boot 开发微服务
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- SQL Server误区30日谈 第1天 正在运行的事务在服务器故障转移后继续执行
- 浅析SQL Server中包含事务的存储过程
- Mysql中的事务是什么如何使用
- MySql的事务使用与示例详解
- C#分布式事务的超时处理实例分析
- C#中的事务用法实例分析
- SQL Server的事务操作隔离模式介绍
- MySQL中事务概念的简洁学习教程
- C#处理Access中事务的方法
- oracle 合并查询 事务 sql函数小知识学习
- 模拟Spring的简单实现
- Spring整合WebSocket应用示例(上)
- spring+html5实现安全传输随机数字密码键盘