多数据源@DS注解不生效
@DS多数据源下失效
·
springboot多数据源@DS注解不生效
application.yml配置文件
spring:
#配置数据源
datasource:
dynamic:
primary: master
strict: false
datasource:
master:
url: jdbc:postgresql://192.168.10.68:5432/gd_y_plus
username: gd_y_plus
password: gd_y_plus
driver-class-name: org.postgresql.Driver
wiki:
url: jdbc:postgresql://192.168.10.68:5432/wikijs_db
username: wikijs
password: wikijs
driver-class-name: org.postgresql.Driver
失败场景
@Override
public void addUserAndRole(SysUser sysUser, List<SysUserRole> sysUserRoleList,Boolean addUsers) {
//新增或更新
this.saveOrUpdate(sysUser); //将用户信息新增到gd_y_plus数据库
// 2022-09-26 新增用户到 wikijs
if (addUsers){
usersService.saveUsers(sysUser);
}
//保存用户角色之前,先删除之前的历史数据
sysUserRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>()
.eq(SysUserRole::getUserId, sysUser.getId()));
sysUserRoleList.forEach(e -> sysUserRoleMapper.insert(e));
}
失败原因
@DS 注解受事务的影响 上述代码中我们gd_y_plus数据库的数据中操作wikijs数据库 这是不行的,解决方式就是在 操作wikijs相应方法中新开一个事务
解决方式
@DS("wiki") //切换数据源
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) //开启一个新事务
@Override
public void saveUsers(SysUser sysUser) {
Users users = new Users();
int userId = mapper.getUserId();
users.setId(userId);
users.setEmail(sysUser.getUsername());
users.setPassword(sysUser.getPassword());
users.setName(sysUser.getFullName());
users.setActive(true);
users.setVerified(true);
users.setCreatedAt(LocalDateTime.now().toString());
users.setUpdatedAt(LocalDateTime.now().toString());
mapper.insert(users);
UserGroups userGroups = new UserGroups();
userGroups.setUserId(userId);
userGroups.setGroupId(1);
userGroupsService.save(userGroups);
}
更多推荐
已为社区贡献1条内容
所有评论(0)