当前位置:主页 > java教程 > Spring Data默认值

Spring Data默认值的错误解决

发布:2023-03-13 17:00:01 59


为找教程的网友们整理了相关的编程文章,网友羿雅健根据主题投稿了本篇教程内容,涉及到Spring、Data默认值、Spring、Data默认值配置、Spring Data默认值相关内容,已被666网友关注,内容中涉及的知识点可以在下方直接下载获取。

Spring Data默认值

Spring Data有很多配置的默认值,但不一定都适合你。如一个依赖Cassandra 的项目,有时写入数据后,并不能立马读到。这种错误并没有什么报错,一切都是正常的,就是读不到数据。

源码解析

直接使用 Spring Data Cassandra 操作时,实际依赖 Cassandra driver 内部的配置文件,目录:

.m2\repository\com\datastax\oss\java-driver-core\4.6.1\java-driver-core-4.6.1.jar!\reference.conf

很多默认配置,很重要配置是 Consistency,driver中默认为 LOCAL_ONE:

basic.request {
 

  # The consistency level.
  #
  # Required: yes
  # Modifiable at runtime: yes, the new value will be used for requests issued after the change.
  # Overridable in a profile: yes
  consistency = LOCAL_ONE
 
//省略其他非关键配置 
}

执行读写操作时,都会使用 LOCAL_ONE。运行时配置调试截图:

Cassandra 使用核心原则:使R(读)+W(写)>N,即读和写的节点数之和大于备份数。

设数据备份 3 份,待写入数据分别存储在 A、B、C 节点。常见搭配是 R(读)和 W(写)的一致性都是 LOCAL_QURAM,这样可以保证能及时读到写入的数据;而假设在这种情况下,读写都用 LOCAL_ONE,则可能发生这样的情况:用户写入一个节点 A 就返回,但用户 B 立马读的节点是 C,由于是LOCAL_ONE 一致性,则读完 C 就可立马返回。此时,就会出现数据读取可能落空case。

为何Cassandra driver 默认使用 LOCAL_ONE?其实是最合适的,因为只有一台机器,读写都只能命中一台。但产线上的 Cassandra 大多都是多数据中心多节点的,备份数大于1。所以读写都用 LOCAL_ONE 就会出现问题。

修正

修改默认值,以 consistency 为例。

@Override
protected SessionBuilderConfigurer getSessionBuilderConfigurer() {
    return cqlSessionBuilder -> {
        DefaultProgrammaticDriverConfigLoaderBuilder defaultProgrammaticDriverConfigLoaderBuilder = new DefaultProgrammaticDriverConfigLoaderBuilder();
        driverConfigLoaderBuilderCustomizer().customize(defaultProgrammaticDriverConfigLoaderBuilder);
        cqlSessionBuilder.withConfigLoader(defaultProgrammaticDriverConfigLoaderBuilder.build());
        return cqlSessionBuilder;
    };
}

@Bean
public DriverConfigLoaderBuilderCustomizer driverConfigLoaderBuilderCustomizer() {
    return loaderBuilder -> loaderBuilder
            .withString(REQUEST_CONSISTENCY, ConsistencyLevel.LOCAL_QUORUM.name())
}

将一致性级别从 LOCAL_ONE 改成了 LOCAL_QUARM,符合实际产品部署和应用情况。

到此这篇关于Spring Data默认值的错误解决的文章就介绍到这了,更多相关Spring Data默认值内容请搜索码农之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持码农之家!


参考资料

相关文章

  • Spring循环依赖实现过程揭秘

    发布:2023-03-08

    这篇文章主要介绍了Spring循环依赖实现过程,Spring的解决循环依赖是有前置条件的,要解决循环依赖我们首先要了解Spring Bean对象的创建过程和依赖注入的方式


  • 如何解决Spring-boot JMS 发送消息慢

    发布:2019-12-20

    这篇文章主要为大家详细介绍了Spring-boot JMS 发送消息慢的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • laypage+SpringMVC实现后端分页的技术分享

    发布:2020-07-19

    这篇文章主要为大家详细介绍了laypage+SpringMVC实现后端分页,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • Jenkins一键打包部署SpringBoot应用

    发布:2023-03-03

    本文主要介绍了Jenkins一键打包部署SpringBoot应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


  • spring event 事件异步处理方式(发布,监听,异步处理)

    发布:2023-04-03

    这篇文章主要介绍了spring event 事件异步处理方式(发布,监听,异步处理),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教


  • ElasticSearch整合SpringBoot搭建配置

    发布:2023-03-27

    这篇文章主要为大家介绍了ElasticSearch整合SpringBoot搭建配置详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪


  • SpringBoot项目从18.18M瘦身到0.18M的实现

    发布:2023-03-02

    本文主要介绍了SpringBoot项目从18.18M瘦身到0.18M的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


  • SpringDataRedis简单使用示例代码

    发布:2023-04-15

    这篇文章主要介绍了SpringDataRedis简单使用,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下


网友讨论