更新时间:2022-12-27 GMT+08:00
分享

事务中使用强制路由

SDK不支持分布式事务,事务与强制指定路由@DynamicRoute同时使用时,以第一条sql选择的数据源为准,后续sql,即使使用@DynamicRoute指定数据源,也不生效。同一个事务中,不允许访问不同的数据库。

如下,service层的updateUser方法,开启了事务,并且里面有两个接口,第一个userReopository2上指定路由"dc2",第二个userReopository2上指定路由"dc1",此时以第一个接口中的注解指定的路由为准,使用“dc2”的数据源。

@Slf4j
@Repository
@javax.annotation.Generated(value = "com.huaweicloud.devspore.codegen, 1.5.1-SNAPSHOT")
@DynamicRoute(source = "dc1")
public class UserRepository extends AbstractUserRepository {

    public User update(User user) {
        return this.updateById(user);
    }

}

@Slf4j
@Repository
@javax.annotation.Generated(value = "com.huaweicloud.devspore.codegen, 1.5.1-SNAPSHOT")
@DynamicRoute(source = "dc2")
public class UserRepository2 extends AbstractUserRepository {

    public User update(User user) {
        return this.updateById(user);
    }

}

/**
 * UserService Class
 *
 * @since 2022-08-22
 */
@Slf4j
@org.springframework.stereotype.Service("UserService")
@javax.annotation.Generated(value = "com.huaweicloud.devspore.codegen, 1.5.1-SNAPSHOT")
public class UserService implements IUserService {
    // auto generated code

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private UserRepository2 userRepository2;


    /**
     * UpdateUserById Method
     *
     * @param user user
     * @return User
     */
    @Transactional
    public User updateUserById(User user) {
        userRepository2.update(user);
        return userRepository.update(user);
    }
}
分享:

    相关文档

    相关产品