spring-data - Spring Boot Cassandra 连接到节点时出错(endPoint=localhost:1234,hostId=null,hashCode=37hfeouh3),
问题描述
在我的 Spring Boot Cassandra 构建中,我收到以下错误:s0-admin-1] cdodiccontrol.ControlConnection:[s0] 连接到节点时出错(endPoint=localhost:1234,hostId=null,hashCode=37hfeouh3),尝试下一个节点( ConnectionInitException: [s0|control|connecting...] 协议初始化请求,步骤 1 (OPTIONS): 发送请求失败 (io.netty.channel.StacklessClosedChannelException))
实体类型
@Data
@Builder
@Table
public class Class1 {
@Id
private String id;
private String data;
private Class2 data2;
private Integer data3;
...
}
public class2 Class2 {
@Id
@JasonProperty
private String id;
@Indexed
@JasonProperty
private String data;
@JasonProperty
private String data2;
@JasonProperty
private Integer data3;
...
}
@Configuration
@EnableCassandraRepositories
@ConfigurationProperties(prefix = "DBProperties")
public class ApplicationConfig extends AbstractCassandraConfiguration {
private String DBKEYSPACE;
@Override
protected String getKeyspaceName() {
return DBKEYSPACE;
}
public String[] getEntityBasePackages() {
return new String[] { "com.oreilly.springdata.cassandra" };
}
}
@ConfigurationProperties(prefix = "DBPROPERTIES")
@Slf4j
public class FactoryBeanAppConfig {
private String contactPoints;
private String keySpace;
private Integer port;
private String password;
private String username;
private String dataCenter;
/*
* Factory bean that creates the com.datastax.oss.driver.api.core.CqlSession instance
*/
@Bean
public CqlSessionFactoryBean session() {
//log it we made it.
log.info("I made it to CqlSessionFactoryBean");
CqlSessionFactoryBean session = new CqlSessionFactoryBean();
session.setContactPoints(URLINFO);
log.info("Contact Points: " +URLINFO);
session.setKeyspaceName(DBKEYSPACE);
//session.setPort(OURPORT);
session.setUsername(username);
session.setPassword(password);
session.setLocalDatacenter(LOCALDCENTER INFORMATION);
return session;
}
}
我找不到一个很好的例子,甚至无法让它正常工作。查看此文档:https://docs.spring.io/spring-data/cassandra/docs/current/reference/html/#cassandra.core这是实现示例 55 我唯一要做的事情
解决方案
对于 Spring Boot 运行您的应用程序,它需要在您的服务器应用程序(例如 tomcat)启动时加载数据库。因此,应首先创建您的架构。如果没问题,您可以在 cassandra.yaml 文件中将“localhost”更改为“127.0.0.1”。
重要提示: “ [s0] Error connected to Node(endPoint=localhost: 1234 ,... ” 请检查 cassandra 的端口。正确的是 9042。
它会解决你的问题。但是,可能会发生其他错误,因为其他类。
然后,您可以更正以下类:
@SpringBootApplication
@EnableCassandraRepositories(basePackages = { "<package's path>" })
@EntityScan(basePackages = { "<package's path>" })
@ComponentScan(basePackages = { "<package's path>" })
public class ApplicationConfig extends SpringBootServletInitializer
{
SpringApplication.run(ApplicationConfig.class, args);
}
实体:
@Table("<table name>")
public class Class1 {
@PrimaryKeyColumn(name = "<field name id>", type = PrimaryKeyType.PARTITIONED)
private String id;
@Column("<field name data>")
private String data;
private Class2 data2; //I think this declaretion can cause error
@Column("<field name data3>")
private Integer data3;
...
}
这个 FactoryBeanAppConfig 的类听起来不太好。我创建了一个类来读取 application.properties 并注入这个类来连接数据库数据,如键空间的名称、端口等。此链接将帮助您创建此类:https ://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config 。然后,您在 FactoryBeanAppConfig 的类中使用这个类来获取 DBKEYSPACE、OURPORT、...。
这是一个帮助您理解我在说什么的示例:https ://www.baeldung.com/spring-data-cassandra-tutorial 。
推荐阅读
- java - Java GSON 自定义反序列化器版本控制支持
- ionic-framework - 如何从我的 iOS 离子电容器插件中获取数据?
- php - 将多维数组除以键值 php 并输出形成
- sql-server - 根据导入的 csv 大小确定 mdf 大小
- python - Jenkins 中的 pipenv shell 返回问题 termios.error: (25, 'Inappropriate ioctl for device')
- javascript - 获取函数对象的描述符
- php - Laravel - 在控制器中使用 $this 关键字调用类的成员函数
- javascript - 是否有另一种方法可以使用类“标签”在跨度中循环数组
- html - 如何务实地使用 WKWebView 登录网站?
- ms-access - ADODB.RecordSet.MoveNext 上升 2