一、背景
上一系列文章,我们说了积分的数模设计及接口设计,接下里,我们将梳理一下具体的代码实现。
使用的语言的java,基本框架是spring-boot,持久化框架则是Jpa。
使用到的技术点有:
- 分布式锁(积分发放和消耗,在分布式场景下,防止网络重试带来的重复请求问题)
- 乐观锁(更新积分账户表和积分订单表)
- 事件驱动机制(积分账户遇有变更,及时通知用户,发送消息提醒)
限于篇幅,我们将分文两篇来讲:
- 积分账户及收支记录
- 积分订单的退款和结算
二、积分的收入
用户能够通过三种途径获得积分,发放的核心逻辑是一致的,但三者的前置校验不同。
所以,我们定义三个不同的方法,各自校验完成,统一调用发放积分的方法。
因为涉及多次操作数据库,需要开启事务,并且修改事务的隔离级别为Isolation.READ_COMMITTED,见下代码。(原因见后文的乐观锁实现)
- 购买虚拟货币/积分