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

来源:6-2 店铺信息编辑之Service层的实现

风一样丿男人

2021-03-09

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

写回答

2回答

翔仔

2021-03-09

			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
0

翔仔

2021-03-09

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

0
3
风一样丿男人
回复
翔仔
没理解,更新是没问题,查询没啥就不走从了,更新的时候主键ID不变吧
2021-03-09
共3条回复

Java双版本(SSM到SpringBoot)校园商铺全栈开发

SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需

5113 学习 · 8144 问题

查看课程