【问题标题】:Spring multiple DB endpointsSpring 多个数据库端点
【发布时间】:2017-12-24 13:24:21
【问题描述】:

Spring 是否能够使用不同的数据库端点进行故障转移和查询路由 - 即读取到读取集群,写入到主集群?并在Service 类中指定每个方法使用哪个端点

例如,假设我们有以下服务。 savedelete 可以去主端点写,其余的可以去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);
    }
}

【问题讨论】:

标签: spring jpa


【解决方案1】:

引用这个答案stackoverflow.com/a/43326808/935122

最好的方法是使用 MySQL Connector/J 复制感知驱动配置。您的连接字符串将如下所示

jdbc:mysql:replication://[master host][:port],[slave host 1][:port][,[slave host 2][:port]]...[/[database]]

一旦您将事务标记为只读,它将自动路由到只读从属

https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-master-slave-replication-connection.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-06
    • 2018-06-06
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 2012-01-31
    • 2013-10-26
    • 1970-01-01
    相关资源
    最近更新 更多