当前位置: 首页 > news >正文

有什么平台可以做网站网络服务器价格

有什么平台可以做网站,网络服务器价格,商贸办公网站入口,东莞微信网站开发1、背景 在我们的日常开发中,经常会存在在一个Service层中调用另外一个Service层的方法。比如:我们有一个TaskService,里面有一个execTask方法,且这个方法存在事物,这个方法在执行完之后,需要调用LogServi…

1、背景

在我们的日常开发中,经常会存在在一个Service层中调用另外一个Service层的方法。比如:我们有一个TaskService,里面有一个execTask方法,且这个方法存在事物,这个方法在执行完之后,需要调用LogService的insertLog方法记录一条日志,这个方法上也有事物,不管日志记录成功还是失败,都不能影响execTask方法的执行。因此我们很容易写出如下代码。

@Transactional
public void execTaskV1(){log.info("开始执行任务");try {logService.insertLogV1();} catch (Exception e) {log.error("添加日志出现错误");}log.info("完成任务执行");
}

思考: 上方的代码,如果insertLogV1跑出了异常,execTaskV1方法的事物可以正常提交吗?

2、异常是如何实现出现的

1、了解Spring事物的传播属性

传播行为描述应用场景行为特点
Propagation.REQUIRED如果当前存在事务,则加入该事务;如果当前没有事务,则启动一个新的事务。大多数场景,如多个方法需要在同一个事务中完成。- 如果当前事务存在,方法执行在当前事务上下文中。
- 如果当前事务不存在,创建新事务。
Propagation.SUPPORTS如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式执行。对事务支持没有强制要求的场景,如只读查询。- 如果当前事务存在,方法执行在当前事务上下文中。
- 如果当前事务不存在,以非事务方式执行。
Propagation.MANDATORY如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。必须在一个已存在的事务中执行的场景。- 必须在已有事务中执行,否则抛出 IllegalTransactionStateException
Propagation.REQUIRES_NEW每次调用该方法时都会启动一个新的事务。当前事务(如果有)会被挂起。需要独立事务的场景,如日志记录或独立的业务操作。- 总是创建新事务。
- 当前事务(如果有)会被挂起,直到新事务完成。
Propagation.NOT_SUPPORTED总是以非事务方式执行,并且暂停当前事务(如果有)。不需要事务的场景,如简单的查询操作。- 总是以非事务方式执行。
- 暂停当前事务(如果有)。
Propagation.NEVER总是以非事务方式执行,如果当前存在事务,则抛出异常。严格禁止事务的场景,如某些非事务性操作。- 必须在非事务上下文中执行,否则抛出 TransactionException
Propagation.NESTED如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则启动一个新的事务。需要嵌套事务的场景,如复杂的业务流程中需要独立的回滚点。- 如果当前事务存在,创建一个嵌套事务(依赖于数据库支持)。
- 如果当前事务不存在,创建新事务。

2、模拟异常出现

Transaction rolled back because it has been marked as rollback-only 这个异常在上述的案例中是如何实现的呢?
异常出现
从上图中可知,出现了Transaction rolled back because it has been marked as rollback-only这个异常,那么这个异常是如何出现的呢?

其实这个是和Spring事物的传播属性Propagation有关。

默认情况下@Transaction的传播属性是Propagation.REQUIRED, 即如果当前存在事务,则加入该事务;如果当前没有事务,则启动一个新的事务。 在我们的例子中,事物的隔离级别都是Propagation.REQUIRED,即是在同一个事物中,因此insertLogV1方法抛出异常后,虽然上层捕获到了,但其实这个时候这个事物已经被标记成回滚状态了,因此事物无法提交成功。

如何解决: 只需要修改insertLogV1事物的传播属性为Propagation.REQUIRES_NEW即可。

3、完整代码

完整代码-https://gitee.com/huan1993/spring-cloud-parent/tree/master/springboot/springboot-transaction-v1

http://www.sczhlp.com/news/16748/

相关文章:

  • 做网站备案是什么意思广州网络推广定制
  • 泰州高端网站建设如何收费软件优化
  • 小程序管理平台seo是搜索引擎优化吗
  • 大宇网络做网站怎么样常见的营销策略有哪些
  • 做的单页html怎么放网站怎么收录网站
  • 做网站必须要买服务器吗seo如何优化网站
  • 梧州seo公司自动seo优化
  • 长春网站营销全网关键词优化公司哪家好
  • 佛山企业一般在哪网站发布消息首页
  • seo网站优化及网站推广企业培训考试
  • 门户网站的建设原理免费域名申请的方法
  • 企业网站倾向于wordpress新品上市怎么做宣传推广
  • 用asp.net做电商网站网页制作接单平台
  • 版式设计五种排版山东seo首页关键词优化
  • 专门做电子书的网站有哪些今日要闻 最新热点
  • 同城购物网站怎么做建立网站要多少钱一年
  • 网站开发工具的功能包括html每日国际新闻最新消息
  • html5网站制作编辑源码网络运营推广合作
  • 做直播网站收费吗怎么做百度网页
  • 简述网站推广的基本方法所有的竞价托管公司
  • 天津制作网站公司推荐北京seo网站设计
  • 南昌市做网站推广的十种方式
  • 企业网站怎么做连接深圳网站建设公司
  • 广州网站开发费用营销策划有限公司经营范围
  • 食品厂招男女工5000seo的优化方向
  • 正品二手手表交易网临沂seo公司稳健火星
  • 视频解析网站怎么做的湛江今日头条
  • 建企业网站哪个平台好浏览器大全网站
  • 传统网站与营销型网站如何提升网站搜索排名
  • 查wordpress主题seo教程免费分享