运行 Spring Boot cassandra 项目时出现异常
Posted
技术标签:
【中文标题】运行 Spring Boot cassandra 项目时出现异常【英文标题】:Exception while running Spring boot cassandra project 【发布时间】:2016-06-02 15:15:10 【问题描述】:我通过为 web、安全、验证和 spring-boot cassandra 选择一些依赖项下载了 spring 初始化程序项目。当我尝试运行 ./gradlew bootrun 时,我在启动过程中遇到以下异常
org.springframework.beans.factory.BeanCreationException:在类路径资源 [org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfiguration.class] 中定义名称为“session”的 bean 创建错误:调用 init 方法失败;嵌套异常是 com.datastax.driver.core.exceptions.NoHostAvailableException:所有主机尝试查询失败(尝试:localhost/127.0.0.1:9042(com.datastax.driver.core.exceptions.InvalidQueryException:未配置的表 schema_keyspaces )) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在 org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] 在 org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE] 在 com.anirudh.myretail.CassandratestApplication.main(CassandratestApplication.java:10) [main/:na] 引起:com.datastax.driver.core.exceptions.NoHostAvailableException:所有主机尝试查询失败(尝试:localhost/127.0.0.1:9042(com.datastax.driver.core.exceptions.InvalidQueryException:未配置的表 schema_keyspaces )) 在 com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:240) ~[cassandra-driver-core-2.1.9.jar:na] 在 com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:86) ~[cassandra-driver-core-2.1.9.jar:na] 在 com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1429) ~[cassandra-driver-core-2.1.9.jar:na] 在 com.datastax.driver.core.Cluster.init(Cluster.java:162) ~[cassandra-driver-core-2.1.9.jar:na] 在 com.datastax.driver.core..connectAsync(Cluster.java:341) ~[cassandra-driver-core-2.1.9.jar:na] 在 com.datastax.driver.core.Cluster.connectAsync(Cluster.java:314) ~[cassandra-driver-core-2.1.9.jar:na] 在 com.datastax.driver.core.Cluster.connect(Cluster.java:252) ~[cassandra-driver-core-2.1.9.jar:na] 在 org.springframework.cassandra.config.CassandraCqlSessionFactoryBean.afterPropertiesSet(CassandraCqlSessionFactoryBean.java:82) ~[spring-cql-1.3.2.RELEASE.jar:na] 在 org.springframework.data.cassandra.config.CassandraSessionFactoryBean.afterPropertiesSet(CassandraSessionFactoryBean.java:43) ~[spring-data-cassandra-1.3.2.RELEASE.jar:na] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]
【问题讨论】:
【参考方案1】:com.datastax.driver.core.exceptions.InvalidQueryException:未配置的表 schema_keyspaces
Spring Data 使用的 Cassandra Java 驱动程序是 2.1.9
您使用的 Cassandra 版本可能是 3.x。自 3.x 以来,所有元数据都已移至键空间 system_schema
您的问题的解决方案是:
将您的版本降级到 Cassandra 2.2.x 或 2.1.x 等待Spring Data Cassandra将驱动版本升级到 3.0.0 如果您不想等待,请使用Achilles 5.2.0,它是一个对象 支持 Cassandra 3.x 的映射器。 注意:我是Achilles的创造者 如果您不想等待,请使用driver-mapper 模块 附带 Cassandra Java 驱动程序【讨论】:
非常感谢您提供帮助。我刚刚降级了 cassandra 的版本,它工作了。我也会尝试使用 Achillies 4.1.0 和 cassandra 3.x 来解决这个问题。 如何使用 driver-mapper 模块来摆脱这个错误?我在 pom.xml 中包含了 cassandra-driver-mapper。是否需要进行额外的配置?以上是关于运行 Spring Boot cassandra 项目时出现异常的主要内容,如果未能解决你的问题,请参考以下文章
禁用 Spring Boot 启动器 Cassandra 进行单元测试
Spring Boot 1.4:Spring Data Cassandra 1.4.2 与 Cassandra 3.0 不兼容?
Spring Boot 1.5.x with Spring Data Cassandra 1.5.x 与 Cassandra 2.1 不兼容
使用 spring-boot-data 在 Cassandra 中进行分页