jeecgboot / JeecgBoot

🔥「企业级低代码平台」前后端分离架构SpringBoot 2.x/3.x,SpringCloud,Ant Design&Vue3,Mybatis,Shiro,JWT。强大的代码生成器让前后端代码一键生成,无需写任何代码! 引领新的开发模式OnlineCoding->代码生成->手工MERGE,帮助Java项目解决70%重复工作,让开发更关注业务,既能快速提高效率,帮助公司节省成本,同时又不失灵活性。
http://www.jeecg.com
Apache License 2.0
40.1k stars 14.7k forks source link

mybatisplus动态表名拦截器,实现分表功能 #6270

Closed DotNeter-Hpf closed 1 month ago

DotNeter-Hpf commented 3 months ago
版本号:

3.3.3

分支: master?还是springboot3?

master

前端版本: vue3版?还是 vue2版?

vue2

问题描述:

mybatisplus动态表名拦截器,实现分表功能,通过apiPost软件一键测压,并发数2,压测轮次10,发现有15次接口调用报错

截图&代码:

DynamicTableConstant.java public static final String HWT_OM_CDR = "hwt_om_cdr";

CommonConstant.java String YEAR_MONTH="YEAR_MONTH";

DynamicTableAspect.java -> around() String yearMonth = request.getHeader(CommonConstant.YEAR_MONTH); ThreadLocalDataHelper.put(CommonConstant.YEAR_MONTH, yearMonth);

MybatisPlusSaasConfig.java -> dynamicTableNameInnerInterceptor() if(DynamicTableConstant.HWT_OM_CDR.equals(dynamicTableName)){ //当dynamicTableName不为空时才走动态表名处理逻辑,否则返回原始表名 if (ObjectUtil.isNotEmpty(dynamicTableName) && dynamicTableName.equals(tableName)) { // 获取当前年月 String yearMonth = ThreadLocalDataHelper.get(CommonConstant.YEARMONTH); //拼接表名规则(原始表名+下划线+年+月) return tableName + "" + yearMonth; } }

OmCdrController.java @DynamicTable(value = DynamicTableConstant.HWT_OM_CDR) @PostMapping(value = "/add") public Result add(@RequestBody OmCdr omCdr) { omCdrService.save(omCdr); return Result.OK("添加成功!"); }

image

友情提示(为了提高issue处理效率):

EightMonth commented 1 month ago

该功能与JeecgBoot提供的功能无关,请参考MybatisPlus官方文档与样例 文档:https://baomidou.com/plugins/dynamic-table-name/ demo: https://gitee.com/baomidou/mybatis-plus-samples/tree/master/mybatis-plus-sample-dynamic-tablename