Skip to content

源码

SysUserService

java
public interface SysUserService extends IElsfsService<SysUser>, UserService<SysUser> {

}
@Service
@DS(DatasourceNameConstant.ADMIN)
public class SysUserServiceImpl extends ElsfsServiceImpl<SysUserMapper,SysUser> implements SysUserService {
}

SysUserDeptService

java
public interface SysUserDeptService {
  List<String> getByUserId( String userId);
  Boolean deleteByUserId(String userId);

  boolean saveBatch( List<SysUserDept> sysUserDepts);
}
@Service
@RequiredArgsConstructor
@DS(DatasourceNameConstant.ADMIN)
public class SysUserDeptServiceImpl implements SysUserDeptService {
  private final SysUserDeptMapper sysUserDeptMapper;
  
  @Override
  public List<String> getByUserId(String userId) {
    return sysUserDeptMapper.selectByUserId(userId);
  }

  @Override
  public Boolean deleteByUserId(String userId) {
    return sysUserDeptMapper.deleteByUserId(userId);
  }

  @Override
  public boolean saveBatch(List<SysUserDept> sysUserDepts) {
    if (CollectionUtils.isEmpty(sysUserDepts)){{
      return false;
    }}
    return sysUserDeptMapper.insertBatch(sysUserDepts);
  }
}
java

/**
 * 用户管理
 * @author zeng
 */
@Component
@RequiredArgsConstructor
public class SysUserManager {

  private final SysUserService sysUserService;
  private final SysUserDeptService sysUserDeptService;

  @Transactional(rollbackFor = Exception.class)
 // @DS(DatasourceNameConstant.ADMIN)
  public Boolean editUser(SysUserCO co){
    sysUserService.updateById(co);
    sysUserDeptService.deleteByUserId(co.getUserId());
    sysUserDeptService.saveBatch(co.getDeptIds()
      .stream()
      .map(id -> new SysUserDept(co.getUserId(), id)).toList());
    return true;
  }
}

SysUserController

java
@RestController
@RequestMapping("/user")
@RequiredArgsConstructor
@Tag(description = "user", name = "用户管理")
public class SysUserController extends BaseController<SysUser, SysUser, SysUserCO, SysUserService> {
 @Override
  public R<Boolean> edit(SysUserCO co) {
    if (!getConfig().edit()) {
      return R.error("不支持修改数据");
    }
    check(co, true);
    return R.success(sysUserManager.editUser(co), "修改成功");
  }
}

导致的问题:@DS(DatasourceNameConstant.ADMIN) 注解未生效 没有切换数据源

失效原因

待排查

解决办法

  1. SysUserManager editUser 添加 @DS(DatasourceNameConstant.ADMIN)注解 弊端 这个方法需要全部在一个数据源下执行
  2. 使用 DynamicDataSourceContextHolder.push(DatasourceNameConstant.ADMIN) 切换
  3. 待排查 无需修改

版权声明