- 已关闭**。此问题需要details or clarity。当前不接受答案。
- 想要改进此问题?**添加详细信息并通过editing this post阐明问题。
3天前关闭。
Improve this question
- 添加了配置文件以通过编程方式获取联系点**
@Bean(destroyMethod = "close")
public CqlSession session() {
CqlSession session = CqlSession.builder()
.addContactPoint(InetSocketAddress.createUnresolved("[240b:c0e0:1xx:xxx8:xxxx:x:x:x]", port))
.withConfigLoader(
DriverConfigLoader.programmaticBuilder()
.withString(DefaultDriverOption.LOAD_BALANCING_LOCAL_DATACENTER, localDatacenter) .withString(DefaultDriverOption.AUTH_PROVIDER_USER_NAME,username)
.withString(DefaultDriverOption.AUTH_PROVIDER_PASSWORD,password)
.withString(DefaultDriverOption.CONNECTION_INIT_QUERY_TIMEOUT,"10s")
.withString(DefaultDriverOption.CONNECTION_CONNECT_TIMEOUT, "20s")
.withString(DefaultDriverOption.REQUEST_TIMEOUT, "20s")
.withString(DefaultDriverOption.CONTROL_CONNECTION_TIMEOUT, "20s")
.withString(DefaultDriverOption.SESSION_KEYSPACE,keyspace)
.build())
//.addContactPoint(InetSocketAddress.createUnresolved(InetAddress.getByName(contactPoints).getHostName(), port))
.build();
}
return session;
'原因是:org. springframework. bean. bean示例化异常:无法示例化[com. datastax. oss. driver. api. core. CqlSession]:工厂方法"cassandraSession"引发异常,消息为:由于您提供了显式联系点,因此必须显式设置本地DC(请参阅配置中的basic. load-balancing-policy. local-datacenter,或使用SessionBuilder. withLocalDatacenter以编程方式设置)。节点(端点=/127.0.0.1:9042,主机ID = 0323221f-9a0f-ec92-ea4a-c1472c2a8b94,哈希代码= 39075b16)=数据中心1。此群集中的当前DC为:数据中心1位于组织. springframework. beans.工厂.支持.简单示例化策略.示例化(简单示例化策略. java:171)~[ spring-beans-6.0.2.jar:6.0.2]位于组织. springframework. beans.工厂.支持.构造器解析器.示例化(构造器解析器. java:648)~[ spring-beans-6.0.2.jar:6.0.2]...省略了89个常见帧原因是:java.lang.IllegalStateException:由于您提供了显式联系点,因此必须显式设置本地DC(请参阅配置中的basic. load-balancing-policy. local-datacenter,或使用SessionBuilder. withLocalDatacenter以编程方式设置)。节点(端点=/127.0.0.1:9042,主机ID = 0323221f-9a0f-ec92-ea4a-c1472c2a8b94,哈希代码= 39075b16)=数据中心1。此群集中的当前DC为:数据中心1位于com.数据栈. oss.驱动程序.内部.核心.负载平衡.帮助程序.强制本地DcHelper.发现本地Dc(强制本地DcHelper.java:91)~[ java-驱动程序-核心-4.11.4-yb-1-RC1.jar:na]位于com.数据栈. oss.驱动程序.内部.核心.负载平衡.默认负载平衡策略.发现本地Dc(默认负载平衡策略. java:119)~[ java-驱动程序-核心-4.11.4-yb-1-RC1.jar:na]位于
- 这是应用程序. yml文件**
spring:
data:
cassandra:
keyspace-name: xxx
contact-points: [xxxx:xxxx:xxxx:xxx:xxx:xxx]
port: xxx
local-datacenter: xxxx
use-dc-aware: true
username: xxxxx
password: xxxxx
ssl: true
SchemaAction: CREATE_IF_NOT_EXISTS
但是应用程序仍然指向localhost,尽管我已经明确提到了联系点和localDC
- stg事件的日志为:**
原因:com. datastax. oss. driver. api. core.所有节点失败异常:无法访问任何联系点,请确保您提供了有效的地址(显示前1个节点,使用getAllErrors()获取更多信息):节点(端点=/[ 240b:cOe0:102:xxxx:xxxx:x:x:x]:3xxx,主机ID为空,哈希代码= 4e9ba6a8):[com.数据栈.操作系统.驱动程序. api.核心.连接.连接初始化异常:[s0|控制ID:0x984419版本,L:/[ 240b:cOe0:102:5dd7:xxxx:x:x:xxx]:4xxx-R:/[ 240b:c0e0:102:xxxx:xxxx:x:x:x]:3xxx]协议初始化请求,步骤1(选项:意外的目标com. datax. oss. driver. apt. core.连接.关闭连接异常:与远程对等项的连接丢失)]
1条答案
按热度按时间k97glaaz1#
谢谢你的提问!
我将尝试提供一些可能帮助您识别问题的提示,但是应该注意的是,您的应用程序中似乎有一些非标准元素,我特别注意到"java-driver-core-4.11.4-yb-1-RC1.jar"不是DataStax发布的Java驱动程序工件(甚至没有4.11.4 Java驱动程序版本)。这可能与我们稍后讨论的原因有关。我也不认识你上面引用的配置文件。你能提供一些关于你的应用程序是如何配置的更多细节吗?乍看之下,您似乎在使用spring-data-cassandra,但在堆栈跟踪中没有任何提及......因此,也许您正在使用某种自定义配置代码?
关于你的具体问题:我猜想您的过渡环境中可能有一个Java驱动程序配置文件,它为"datastax-java-driver.basic.contact-points"提供了一个默认值。4.x Java驱动程序是通过Lightbend配置库配置的。与我们的情况最相关的是,它在类路径中搜索一组具有不同默认名称的配置文件;这些文件会被合并在一起,生成配置文件传递给驱动程序。2所以如果你有一个应用程序. conf在staging中,它指定了一些连接点,并且在类路径中,你上面引用的代码在你的本地环境中运行良好,但是在staging中失败了。
要验证这一点,请在本地环境的src/main/resources(或类路径中明确包含的其他位置)中创建一个application. conf文件,并为其提供以下内容:
如果您在本地环境中重新运行该应用程序,您应该也会看到该错误。
注意,核心Java驱动程序JAR已经包含了一个reference.conf文件,作为默认配置。因为您没有使用标准的DataStax Java驱动程序JAR,我不知道您是否使用了在该JAR中定义的标准reference.conf文件。有 * 可能 * 在该文件中定义了联系点,尽管如果是这种情况,我希望您在使用该JAR的 * 任何 * 环境中都已经看到了该错误。
最后一点:Java驱动程序应该可以处理IPv6地址。上面描述的问题与IPv6无关;它完全取决于您如何使用Java驱动程序的配置机制。
希望上面的一些是有帮助的!