记一次生产执行修改数据后查询未生效BUG

场景如下:
app端需要通过dubbo服务调用获取数据库中某个编号,因为场景问题,需要对这个编号进行+1后再查询最新数据后使用(先+1是为了防止并发的情况下获取到相同的编号).
在测试环境测试没任何问题,获取到的就是+1后的值,上了生产以后,发现获取到的是未修改前的值.
大致代码如下:

在这里插入图片描述
Service是Dubbo服务,远程调用修改数据库。

排查问题思路:
第一步肯定是检查编号有没有修改成功,通过查询下来发现是修改成功了的
然后再从代码层面看获取编号逻辑是否有问题,也发现没问题.
发现一个现象是:如果去除了修改编号方法上的@Transactional注解,那程序执行又是按预期执行的
此时看上去很像是用修改还未完成提交时,就执行了查询,想到dubbo好像有异步调用的说法,估计是这里出了问题,
预设场景是修改和查询同步执行了导致的,去除了@Transactional注解正常是因为使修改变快了.
特地看了dubbo相关的描述,发现dubbo调用时,默认是同步阻塞的,所以又排除了这个原因.

最后再排查下来发现最终问题是测试环境主从数据库配置用的是同一个数据库,生产环境配了2个不同的库,写入主库还未同步到从库时(因为加了事务,所以同步会稍微慢一点),对从库进行了查询.

解决方案:
1.估算主从同步时间,在执行修改后sleep(50)再执行查询
2.修改后直接返回修改后的对象,不再查询数据库.

### 关于 `el-cascader` 的 `checkStrictly` 属性不生效问题 当遇到 `el-cascader` 组件中的 `props.checkStrictly = true` 设置后仍然无法取消父子节点之间的强关联关系的情况时,可能的原因在于组件的状态更新机制以及数据绑定的方式。 #### 可能原因分析 1. **状态未及时刷新** 如果只是简单地设置 `props.checkStrictly = true` 而没有触发视图重新渲染,则新的配置不会被应用到当前实例上。这通常发生在初始化之后动态变此属性的情况下[^1]。 2. **双向绑定失效** 使用 v-model 或者 :value 和 @input 来实现双向绑定时,如果处理不当可能会导致内部逻辑混乱,进而影响到其他功能正常运作,比如 `checkStrictly` 的效果。 3. **版本兼容性问题** 特定版本可能存在 bug 导致该特性未能按预期工作,在升级 Element UI 到最新稳定版之前建议查看官方文档确认是否存在已知问题并尝试修复方案。 #### 解决策略 为了使 `checkStrictly=true` 生效,可采取如下措施: - **强制重置组件** 当需要更 `checkStrictly` 值的时候,可以通过销毁再创建的方式来确保新参数能够得到正确解析和执行。具体做法是在父组件中维护一个 key ,每当切换 `checkStrictly` 时也同步变更这个key值,从而促使子组件重建。 ```vue <!-- ParentComponent.vue --> <template> <child-component :key="cascaderKey" /> </template> <script> export default { data() { return { cascaderKey: Date.now(), checkStrictlyValue: false }; }, methods: { toggleCheckStrictly() { this.cascaderKey = Date.now(); this.checkStrictlyValue = !this.checkStrictlyValue; } } }; </script> ``` - **监听 props 变事件** 对于某些场景下不想频繁重建整个组件的话,可以在 `<el-cascader>` 中添加 watch 监听器来捕获 `props.checkStrictly` 发生变化后的时机,并调用相应的方法手动通知组件去适应最新的 prop 配置。 ```javascript // ChildComponent.vue (inside script tag) import { nextTick } from 'vue'; setup(props, context){ const handlePropsChange = () => { nextTick(() => { // 执行一些操作让组件识别新的prop值 }); }; watch(() => props['checkStrictly'], handlePropsChange); onMounted(handlePropsChange); return {}; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值