Ist Spring in der Lage, verschiedene Datenbankendpunkte für Failover und Query Routing zu verwenden - dh Lesevorgänge gehen zum Lesecluster, Schreibvorgänge gehen zum Master? Und geben Sie an, welcher Endpunkt pro Methode in einer Service
KlasseSpring mehrere DB-Endpunkte
verwendet werden soll. Sagen wir zum Beispiel, wir haben den folgenden Service. Die save
und delete
können zum Schreiben an den Masterendpunkt gehen, während der Rest an die read cluster
gehen kann.
@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);
}
}
Ich glaube nicht, dass dies möglich ist (mindestens von Frühling lesen geroutet werden Seite) – pvpkiran
Es gibt immer einen Weg. Ich werde es finden – Christian
https://Stackoverflow.com/a/43326808/935122 – Christian