【发布时间】:2017-12-24 13:24:21
【问题描述】:
Spring 是否能够使用不同的数据库端点进行故障转移和查询路由 - 即读取到读取集群,写入到主集群?并在Service 类中指定每个方法使用哪个端点
例如,假设我们有以下服务。 save 和delete 可以去主端点写,其余的可以去read cluster。
@Service
public class ProductService {
@Autowired
private ProductRepository productRepository;
@Autowired
private AttributeService attributeService;
// -------------------------------------------------------------
private boolean nameAvailable(String name, Long id) {
if (id == null) {
return productRepository.findByNameEquals(name) == null;
} else {
return productRepository.findByNameEqualsAndIdIsNot(name, id) == null;
}
}
public synchronized void save(Product product, BindingResult result) {
// synchronized to avoid name duplication
if (!result.hasErrors()) {
if (!nameAvailable(product.getName(), product.getId())) {
result.addError(new FieldError("product", "name", "must be unique"));
} else {
productRepository.save(product);
}
}
}
public void delete(Long id) {
productRepository.delete(id);
}
// -------------------------------------------------------------
public Page<Product> getProducts(PageRequest pageRequest) {
return productRepository.findAll(pageRequest);
}
public Product getProduct(Long id) throws ProductNotFoundException {
Product product = productRepository.findOne(id);
if (product == null) {
throw new ProductNotFoundException();
}
return product;
}
public Page<Attribute> getAttributes(Product product, Pageable pageable) {
return attributeService.getAttributes(product, pageable);
}
}
【问题讨论】:
-
我不认为这是可能的(至少从弹簧方面)
-
总有办法的。我会找到的