day7--1.22 优惠券+事务失效

本文介绍了项目中的优惠券功能,包括创建、发放方式(立即或定时)、领取机制(手动或兑换码),并重点讨论了防止优惠券超领的策略和事务失效的常见场景,如非public方法、非事务方法调用、异常处理和事务传播设置。
摘要由CSDN通过智能技术生成

7-1 介绍一下你们项目中的优惠券功能

优惠券的正常使用有以下流程:创建优惠券->发放->用户端查看->领取使用

1.首先进入后台管理页面,管理员可以查看 优惠券列表信息 等相关操作。

2.当新创建一个优惠券时,需要选择优惠券的发放方式和领取方式。

优惠券的发放:

  • 立即发放:优惠券立刻生效,直接出现在用户端页面供用户领取

  • 定时发放:定一个发放开始时间,时间到期后才会进入出现在用户端页面

优惠券的领取方式:

  • 手动领取:就是展示在用户端页面,由用户自己手动点击领取

  • 指定发放:就是兑换码模式,后台给优惠券生成N张兑换码,由管理员发放给指定用户。

3.最后用户就可以在个人中心“我的优惠券”中,查看、领取、使用已发放的优惠券。

以上就是我的项目中优惠券功能的大体介绍。


7-2 你们项目中是如何防止优惠券超领的

我们项目优惠券防止超领可分为,多人超领和单人超领。

多人超领:每个人每次都不一样。建议使用乐观锁。

单人超领:没有加锁,不具备原子性。多线程并发访问,出现安全问题。

在项目中防止优惠券超领可以采取以下几种策略:

  1. 限制领取数量:在发放优惠券时,可以设置每个用户或每个账号只能领取一定数量的优惠券。这样可以限制用户领取过多的优惠券,避免超领情况的发生。

  2. 设置有效期限:为每个优惠券设置有效期限,确保用户在一定时间内使用优惠券,避免用户长时间持有大量优惠券而不使用。

  3. 绑定用户身份:将优惠券与用户的身份进行绑定,确保每个用户只能使用自己领取的优惠券,避免用户之间的优惠券互相转让或滥用。

  4. 监控和限制频率:对于优惠券的领取和使用操作,可以进行监控和限制频率。例如,限制用户在一段时间内只能领取一次优惠券,或者限制用户在一段时间内只能使用一次优惠券。

  5. 验证和校验:在用户使用优惠券时,进行验证和校验操作,确保优惠券的有效性和合法性。例如,验证优惠券的有效期、使用条件等,避免用户使用过期或不符合条件的优惠券。


7-3 事务失效的场景有哪些

事务失效的场景大概有以下几种:

1.事务方法非public修饰

由于Spring的事务是基于AOP的方式结合动态代理来实现的。因此事务方法一定一定要是public的,这样才能被Spring做事务的代理和增强。

2.非事务方法调用事务方法

非事务方法调用事务方法,其实隐含了一个this. 的前缀。就相当于是直接调用原始的普通方法,而非被Spring代理对象的代理方法,所以事务就肯定失效了。

3.事务方法的异常被捕获

事务方法内部捕获了异常,也就是说在方法执行过程中即使出现了异常也不会向外抛出。而Spring的事务管理就是要感知业务方法的异常,当捕获到异常后才会回滚事务。

现在异常被捕获,就会导致Spring无法感知事务异常,自然不会回滚,事务就失效了。

4.事务异常类型不对

Spring的事务管理默认感知的是RuntimeException,当时事务方法内部抛出了一个IOException时,不会被Spring捕获,因此就不会触发事务回滚,导致事务失效。

5.事务传播行为不对

当一个事务方法内部调用了另一个事务方法,但这两个方法的事务传播行为设置不当时,可能会导致事务的嵌套或事务传播行为冲突,从而导致事务失效。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值