# 第11节:声明事务领取活动领域开发

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!

# 一、开发日志

  • db-router-spring-boot-starter 扩展和完善自研简单版数据库路由组件,拆解路由策略满足声明式路由配合声明式事务一起使用。
  • 补全库表 activity 增加字段 strategy_id 运行本章节记得更新此分支下最新 SQL 语句。抽奖策略ID字段 strategy_id 用于关联活动与抽奖系统的关系。也就是用户领取完活动后,可以通过活动表中的抽奖策略ID继续执行抽奖操作
  • 基于模板模式开发领取活动领域,因为在领取活动中需要进行活动的日期、库存、状态等校验,并处理扣减库存、添加用户领取信息、封装结果等一系列流程操作,因此使用抽象类定义模板模式更为妥当

# 二、自研组件(DBRouter) - 扩展声明式事务

  • 问题:如果一个场景需要在同一个事务下,连续操作不同的DAO操作,那么就会涉及到在 DAO 上使用注解 @DBRouter(key = "uId") 反复切换路由的操作。虽然都是一个数据源,但这样切换后,事务就没法处理了。
  • 解决:这里选择了一个较低的成本的解决方案,就是把数据源的切换放在事务处理前,而事务操作也通过声明式编码进行处理。具体可以参考 db-router-spring-boot-starter 源码

# 1. 拆解路由算法策略,单独提供路由方法

public interface IDBRouterStrategy {

    void doRouter(String dbKeyAttr);

    void clear();

}
1
2
3
4
5
6
7
  • 把路由算法拆解出来,无论是切面中还是硬编码,都通过这个方法进行计算路由