为什么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不启动事务的配置。相关推荐

  1. java service注入失败,使用spring向service里面注入dao不成功。

    使用spring向service里面注入dao不成功.求救啊! 本帖最后由 PaperStar 于 2013-12-26 19:29:20 编辑 页面调用action,action调用service, ...

  2. 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置

    经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - ...

  3. spring中基于XML的AOP配置步骤

    spring中基于XML的AOP配置步骤 IAccountService.java package com.itheima.service;/*** 账户的业务层接口*/ public interfa ...

  4. Spring Cloud Alibaba - 19 Nacos Config配置中心加载不同微服务的通用配置的两种方式

    文章目录 Pre 实现 方式一 通过 shared-dataids 方式 方式二 通过 ext-config方式 配置文件优先级 源码 Pre Spring Cloud Alibaba - 18 Na ...

  5. Spring Cache抽象-基于XML的配置声明(基于EhCache的配置)

    概述 完整示例 pomxml增加依赖 数据库表数据Oracle 实体类 服务层 ehcache的配置文件 Spring-EhCache配置文件 单元测试 日志输出 日志分析 示例源码 概述 首先请阅读 ...

  6. Java程序员从笨鸟到菜鸟之(七十四)细谈Spring(六)spring之AOP基本概念和配置详解

    首先我们来看一下官方文档所给我们的关于AOP的一些概念性词语的解释: 切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象.事务管理是J2EE应用中一个关于横切关注点的很好的例子.在 ...

  7. spring tx:advice 和 aop:config 配置事务

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010741376/article/details/46584463 spring tx:advic ...

  8. spring 加载java类_在Spring中基于Java类进行配置的完整步骤

    在Spring中基于Java类进行配置的完整步骤 发布于 2020-7-7| 复制链接 基于Java配置选项,可以编写大多数的Spring不用配置XML,下面 前言JavaConfig 原来是 Spr ...

  9. 将社交登录添加到Spring MVC Web应用程序:配置

    过去,用户使用用户名和密码组合登录. 尽管如今有些人仍然偏爱传统方式,但越来越多的用户希望使用其社交媒体帐户登录. 这就是使Spring Social(及其子项目)成为Spring项目组合有用的补充的 ...

最新文章

  1. 处理Http请求Gzip格式响应
  2. STM32F10X的boot分析
  3. Jmeter远程测试
  4. JavaFX缺少的功能调查:表视图
  5. Scrum之 评审会议
  6. tomcat6的项目能直接在tomcat7上用吗_极尽人性化的设计: 能“隐形”的笔记本电脑支架...
  7. Spring4 MVC HelloWorld 注解和JavaConfig实例
  8. photon mapping学习笔记
  9. Dockerfile构建LNMP分离环境部署wordpress
  10. Java中的hashCode和equals的解析
  11. 虎年继续做朋友,再来认识一下云和恩墨
  12. 20 杭电计算机考研经验
  13. python正态分布函数_使用Python实现正态分布、正态分布采样
  14. 云夜卡社区源码v4.2 带总控
  15. PHP实现分页功能(一)上一页/下一页(含有分类功能的分页)
  16. 用微型计算机原理做流水灯,微机原理流水灯设计.doc
  17. 第二届BJD CTF做题总结与题目复现-MISCCrypto
  18. 分享Silverlight/WPF/Windows Phone一周学习导读(06月20日-06月26日)
  19. MySQL的安装与配置——详细教程 这是原地址https://www.cnblogs.com/winton-nfs/p/11524007.html
  20. Atmel 89S52 并口 ISP下载

热门文章

  1. 【Ruby】Ruby 类案例
  2. SCRIPT70: 没有权限
  3. update语句中使用子查询
  4. 2. Mysql数据库的入门知识
  5. 英文Ubantu系统安装中文输入法
  6. java项目打jar包
  7. █年薪20万招聘软件工程师!!!
  8. css hack技术整理
  9. Mac iOS 允许从任何来源下载应用并打开
  10. hdu 5199 map或二分或哈希