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