spring的service不启动事务的配置。
为什么80%的码农都做不了架构师?>>>
原来是这样设置的:
<tx:attributes>
<tx:method name="*" read-only="true"/>
</tx:attributes>
发现selectA调用selectB,如果selectB抛出Exception,selectA中捕获Exception但是并不继续向外抛出,最后会出现错误。
Transaction rolled back because it has been marked as rollback-only
纠其原理其实很简单,在selectB返回的时候,transaction被设置为rollback-only了,但是selectA正常消化掉,没有继续向外抛。
那么selectA结束的时候,transaction会执commit操作,但是transaction已经被设置为rollback-only了。
所以会出现这个错误。
有的同学说了,那不是没得搞了,service不能抛出异常,或者不能拦截异常了?
其实不然,其实错误不在这里,而是select这种操作为什么要启动事务呢?
调整好问题,找解决方案,问题就出现在propagation="REQUIRED"这个属性上。
标准文档上这样写:
MANDATORY Support a current transaction, throw an exception if none exists. |
NESTED Execute within a nested transaction if a current transaction exists, behave like PROPAGATION_REQUIRED else. |
NEVER Execute non-transactionally, throw an exception if a transaction exists. |
NOT_SUPPORTED Execute non-transactionally, suspend the current transaction if one exists. |
REQUIRED Support a current transaction, create a new one if none exists. |
REQUIRES_NEW Create a new transaction, suspend the current transaction if one exists. |
SUPPORTS Support a current transaction, execute non-transactionally if none exists. |
看来我们需要如下修改:
<tx:attributes>
<tx:method name="*" read-only="true" propagation="NOT_SUPPORTED"/>
</tx:attributes>
这样select这样的检索操作根本就不启动事务了,而且在有事务的方法中也是可以正常调用select方法的。
现在就没问题了。
但是现在出现了另外一个问题,就是,如果在一个事物内对db进行操作,然后在出事物之前对刚才db操作的数据进行select是获取不到修改结果的,为什么呢?因为not——supported是会在执行select之前挂起原有事物,不在原有事物内,当然无法获得修改后的数据。
怎么办?改成supports:
<tx:attributes>
<tx:method name="*" read-only="true" propagation="SUPPORTS"/>
</tx:attributes>
这个状态用一句话概括就是“有则加入事物,无也不创建事物”。
转载于:https://my.oschina.net/jing31/blog/10414
spring的service不启动事务的配置。相关推荐
- java service注入失败,使用spring向service里面注入dao不成功。
使用spring向service里面注入dao不成功.求救啊! 本帖最后由 PaperStar 于 2013-12-26 19:29:20 编辑 页面调用action,action调用service, ...
- 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置
经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - ...
- spring中基于XML的AOP配置步骤
spring中基于XML的AOP配置步骤 IAccountService.java package com.itheima.service;/*** 账户的业务层接口*/ public interfa ...
- Spring Cloud Alibaba - 19 Nacos Config配置中心加载不同微服务的通用配置的两种方式
文章目录 Pre 实现 方式一 通过 shared-dataids 方式 方式二 通过 ext-config方式 配置文件优先级 源码 Pre Spring Cloud Alibaba - 18 Na ...
- Spring Cache抽象-基于XML的配置声明(基于EhCache的配置)
概述 完整示例 pomxml增加依赖 数据库表数据Oracle 实体类 服务层 ehcache的配置文件 Spring-EhCache配置文件 单元测试 日志输出 日志分析 示例源码 概述 首先请阅读 ...
- Java程序员从笨鸟到菜鸟之(七十四)细谈Spring(六)spring之AOP基本概念和配置详解
首先我们来看一下官方文档所给我们的关于AOP的一些概念性词语的解释: 切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象.事务管理是J2EE应用中一个关于横切关注点的很好的例子.在 ...
- spring tx:advice 和 aop:config 配置事务
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010741376/article/details/46584463 spring tx:advic ...
- spring 加载java类_在Spring中基于Java类进行配置的完整步骤
在Spring中基于Java类进行配置的完整步骤 发布于 2020-7-7| 复制链接 基于Java配置选项,可以编写大多数的Spring不用配置XML,下面 前言JavaConfig 原来是 Spr ...
- 将社交登录添加到Spring MVC Web应用程序:配置
过去,用户使用用户名和密码组合登录. 尽管如今有些人仍然偏爱传统方式,但越来越多的用户希望使用其社交媒体帐户登录. 这就是使Spring Social(及其子项目)成为Spring项目组合有用的补充的 ...
最新文章
- 处理Http请求Gzip格式响应
- STM32F10X的boot分析
- Jmeter远程测试
- JavaFX缺少的功能调查:表视图
- Scrum之 评审会议
- tomcat6的项目能直接在tomcat7上用吗_极尽人性化的设计: 能“隐形”的笔记本电脑支架...
- Spring4 MVC HelloWorld 注解和JavaConfig实例
- photon mapping学习笔记
- Dockerfile构建LNMP分离环境部署wordpress
- Java中的hashCode和equals的解析
- 虎年继续做朋友,再来认识一下云和恩墨
- 20 杭电计算机考研经验
- python正态分布函数_使用Python实现正态分布、正态分布采样
- 云夜卡社区源码v4.2 带总控
- PHP实现分页功能(一)上一页/下一页(含有分类功能的分页)
- 用微型计算机原理做流水灯,微机原理流水灯设计.doc
- 第二届BJD CTF做题总结与题目复现-MISCCrypto
- 分享Silverlight/WPF/Windows Phone一周学习导读(06月20日-06月26日)
- MySQL的安装与配置——详细教程 这是原地址https://www.cnblogs.com/winton-nfs/p/11524007.html
- Atmel 89S52 并口 ISP下载