red*_*alo 5 java cassandra spring-boot
我们正在升级到 Spring boot 2.3.5.RELEASE。我们的应用程序将 cassandra 作为数据库之一,并且我们在节点上启用了身份验证。在更新 Spring Boot 版本后尝试连接到 casssandra 数据库时,我收到此异常并且无法启动应用程序。
Authentication error on node <IP:PORT> requires authentication (org.apache.cassandra.auth.PasswordAuthenticator), but no authenticator configured
Run Code Online (Sandbox Code Playgroud)
我的卡桑德拉配置如下:
@Configuration
@ConfigurationProperties("spring.data.cassandra.keyspaceName")
@EnableCassandraRepositories(basePackages = { "com.company.project.feature.cassandra.repo" },
cassandraTemplateRef = "dbTemplate")
public class Config extends AbstractCassandraConfiguration {
@Autowired
ServerProperties serverProps;
protected String contactPoints;
protected Integer port;
protected String keyspaceName;
protected String localDataCenter;
@Override
public String getContactPoints() {
return contactPoints;
}
/**
* @param contactPoints
*/
public void setContactPoints(String contactPoints) {
this.contactPoints = contactPoints;
}
/**
* @param keyspaceName
*/
public void setKeyspaceName(String keyspaceName) {
this.keyspaceName = keyspaceName;
}
@Override
public String getKeyspaceName() {
return keyspaceName;
}
@Override
public int getPort() {
return port;
}
public void setLocalDataCenter(String localDataCenter) {
this.localDataCenter = localDataCenter;
}
@Override
public String getLocalDataCenter() {
return localDataCenter;
}
public void setPort(Integer port) {
this.port = port;
}
@Bean(name = "dbSession")
@Primary
public CqlSession session() {
String containerIpAddress = getContactPoints();
int containerPort = getPort();
InetSocketAddress containerEndPoint = new InetSocketAddress(containerIpAddress, containerPort);
CqlSessionBuilder builder = CqlSession.builder().withLocalDatacenter(getLocalDataCenter()).addContactPoint(containerEndPoint)
.withAuthCredentials(serverProps.getCassandraUserName(), serverProps.getCassandraPassword())
.withKeyspace(getKeyspaceName());
return builder.build();
}
@Bean("dbOperations")
public CassandraOperations cassandraOperationsB() {
return new CassandraTemplate(session(), cassandraConverter());
}
@Primary
@Bean(name = "dbTemplate")
@Override
public CassandraAdminTemplate cassandraTemplate() {
return new CassandraAdminTemplate(session(), cassandraConverter());
}
Run Code Online (Sandbox Code Playgroud)
}
我在构建 CqlSession 时提供了用户名和密码,但仍然面临此异常。我做错了什么吗?
dil*_*aik 13
在较旧的 Spring 数据版本中,您可以使用:CassandraClusterFactoryBean
. 但这里是一个未来的例子,如果其他人无意中使用了 spring data cassandra 3.0.1,用户名和密码身份验证作为spring data 文档,如果您滚动到页面末尾,那么您将看到CassandraClusterFactoryBean
被删除,而不是我们现在拥有的CqlSessionFactoryBean
。所以示例代码看起来像
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.cassandra.config.AbstractCassandraConfiguration;
import org.springframework.data.cassandra.repository.config.EnableCassandraRepositories;
import org.springframework.data.cassandra.config.CqlSessionFactoryBean;
@Configuration
@EnableCassandraRepositories(basePackages = {"com.some.package"})
@ConfigurationProperties(prefix = "spring.data.cassandra")
@Getter
@Setter
public class CassandraConfig extends AbstractCassandraConfiguration {
private String keyspaceName;
private String contactPoints;
private int port;
private String localDataCenter;
private String username;
private String password;
@Bean
@Override
public CqlSessionFactoryBean cassandraSession() {
CqlSessionFactoryBean cassandraSession = super.cassandraSession();//super session should be called only once
cassandraSession.setUsername(username);
cassandraSession.setPassword(password);
return cassandraSession;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5366 次 |
最近记录: |