事务中使用强制路由
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); } }