源码
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) 注解未生效 没有切换数据源
失效原因
待排查
解决办法
- SysUserManager editUser 添加
@DS(DatasourceNameConstant.ADMIN)注解 弊端 这个方法需要全部在一个数据源下执行 - 使用
DynamicDataSourceContextHolder.push(DatasourceNameConstant.ADMIN)切换 - 待排查 无需修改