请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,今天遇到一个很奇葩的问题?在做店铺更新的时候,数据库主从同步的bug

图片描述第一次传入参数编辑的时候,数据源为:slave,.当更新之后,给前端返回的时候,数据源为:master。
同样的方法ShopDao.queryByShopId。

正在回答 回答被采纳积分+3

插入代码

2回答

翔仔 2021-03-09 23:53:38
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (ms.getSqlCommandType().equals(SqlCommandType.SELECT)) {
    // selectKey 为自增id查询主键(SELECT LAST_INSERT_ID())方法,使用主库
    if (ms.getId().contains(SelectKeyGenerator.SELECT_KEY_SUFFIX)) {
        lookupKey = DynamicDataSourceHolder.DB_MASTER;
    else {
        BoundSql boundSql = ms.getSqlSource().getBoundSql(objects[1]);
        String sql = boundSql.getSql().toLowerCase(Locale.CHINA).replaceAll("[\\t\\n\\r]"" ");
        if (sql.matches(REGEX)) {
            lookupKey = DynamicDataSourceHolder.DB_MASTER;
        else {
            lookupKey = DynamicDataSourceHolder.DB_SLAVE;
        }
    }
}

可以设置断点if (ms.getId().contains(SelectKeyGenerator.SELECT_KEY_SUFFIX)) { 调试一下

1 回复 有任何疑惑可以回复我~
翔仔 2021-03-09 23:36:47

同学好,我看内容都是query请求吧 query的话走从走主都可以的吧

0 回复 有任何疑惑可以回复我~
  • 提问者 风一样丿男人 #1
    是啊,查询不是走从吗,写入和更新,删除走主吗
    回复 有任何疑惑可以回复我~ 2021-03-09 23:38:17
  • 翔仔 回复 提问者 风一样丿男人 #2
    这里update的时候会发一个select 主键的请求,这个是走主的,因为你要update主库,它需要获取你最新的id并返回
    回复 有任何疑惑可以回复我~ 2021-03-09 23:40:56
  • 提问者 风一样丿男人 回复 翔仔 #3
    没理解,更新是没问题,查询没啥就不走从了,更新的时候主键ID不变吧
    回复 有任何疑惑可以回复我~ 2021-03-09 23:42:51
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号