第七天业务题

本文介绍了项目中优惠券功能的关键点,包括设置、获取、使用以及防止多人和单人超领的并发控制方法。同时讨论了事务失效的常见场景,如非public修饰、非事务方法调用事务、异常处理和事务传播设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7-1 介绍一下你们项目中的优惠券功能
优惠券功能在我们的项目中扮演着重要的角色,主要用于提升销售、吸引新用户、增加用户黏性等作用。
优惠券的具体功能如下:
优惠券设置:商家可以自定义优惠券的优惠金额、数量、有效期、优惠券使用规则等。
优惠券获取:根据优惠券种类有两种获取方式,商家可以向用户发放优惠券,如果发现优惠券的领取方式是指定发放,则需要生成兑换码,用户也可以在商家的网站上抢优惠券。
优惠券使用:在用户购买商品时,系统需要验证用户所使用优惠券的有效性。这包括检查优惠券是否过期、是否达到最低消费金额、是否适用于购买的商品等条件。
根据优惠券的类型,系统需要计算出用户享受的优惠金额或折扣,并在结算时自动扣减相应的金额。
以上就是我们项目中优惠券所实现的功能。

7-2 你们项目中是如何防止优惠券超领的
在我们项目中发现优惠券超领有两种情况:多人超领、单人超领。针对这两种不同的情况有不同的解决方案。
多人超领时,可以使用乐观锁解决此问题,每次提交前只要判断当前数量是否小于总计数量即可。这样,只要当前数量小于总计数量,不管有多少线程来执行,都会成功。
单人超领时,可以使用悲观锁解决此问题,可以通过在领取优惠券代码块上加锁,锁用户id来解决此问题。
以上就是我们项目防止优惠券超领的解决方法。

7-3 事务失效的场景有哪些
事务失效的场景有事务方法非public修饰、非事务方法调用事务方法、事务方法的异常被捕获、事务异常类型不对、事务传播行为不对
事务方法非public修饰:由于Spring的事务是基于AOP的方式结合动态代理来实现的。因此事务方法一定要是public的,这样才能便于被Spring做事务的代理和增强。而且,在Spring内部也会有一个检查事务方法的修饰符的类。
非事务方法调用事务方法:非事务方法调用事务方法导致事务失效的原因与Spring框架的事务管理机制有关。Spring通过代理对象实现事务管理,但是非事务方法不会触发代理对象的创建,导致事务失效。
事务方法的异常被捕获:非事务方法调用事务方法时,由于异常被捕获而不会向外抛出,导致Spring无法感知事务异常,从而无法回滚事务,导致事务失效。
事务异常类型不对:Spring事务管理默认只感知RuntimeException异常,对于其他异常如IOException,Spring无法捕获并回滚事务,导致事务失效。
事务传播行为不对:事务传播行为定义了事务方法与其他事务方法的关系,包括如何处理事务的传播和边界。如果事务传播行为设置不正确,可能会导致事务失效或产生意外的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值