У меня есть следующее....
Код: Выделить всё
---
version: '2'
services:
cassandra1:
image: ...cassandra:4.0.0
environment:
- CASSANDRA_DC=datacenter1
ports:
- "9042:9042"
cassandra2:
image: ...cassandra:4.0.0
environment:
- CASSANDRA_DC=datacenter1
- CASSANDRA_SEEDS=cassandra1
ports:
- "9043:9042"
depends_on:
- "cassandra1"
Код: Выделить всё
application:
cassandra:
keyspace-name: test
username: cassandra
password: cassandra
local-datacenter: datacenter1
nodes:
- host: 192.168.56.117
port: 9042
- host: 192.168.56.117
port: 9043
@Getter
@Setter
@Configuration
@ConfigurationProperties(prefix = "application.cassandra")
public class CassandraProperties {
private String keyspaceName;
private String username;
private String password;
private String localDatacenter;
private List nodes;
public static class Node {
@Getter
@Setter
private String host;
@Getter
@Setter
private Integer port;
}
}
@Configuration
@EnableCassandraRepositories
public class CassandraConfig extends AbstractCassandraConfiguration {
@Autowired
private CassandraProperties properties;
@Override
protected SessionBuilderConfigurer getSessionBuilderConfigurer() {
return new SessionBuilderConfigurer() {
@Override
public CqlSessionBuilder configure(CqlSessionBuilder cqlSessionBuilder) {
List nodes = properties.getNodes();
nodes.forEach(
node ->
cqlSessionBuilder.addContactPoint(
InetSocketAddress.createUnresolved(
node.getHost(),
node.getPort()
)
)
);
cqlSessionBuilder.withAuthCredentials(properties.getUsername(), properties.getPassword());
cqlSessionBuilder.withLocalDatacenter(properties.getLocalDatacenter());
return cqlSessionBuilder;
}
};
}
@Override
protected String getKeyspaceName() {
return properties.getKeyspaceName();
}
}
Код: Выделить всё
Caused by: java.lang.IllegalArgumentException: Multiple entries with same key: default=datacenter1 and default=datacenter1
at com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap.conflictException(ImmutableMap.java:215)
at com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap.checkNoConflict(ImmutableMap.java:209)
at com.datastax.oss.driver.shaded.guava.common.collect.RegularImmutableMap.checkNoConflictInKeyBucket(RegularImmutableMap.java:147)
at com.datastax.oss.driver.shaded.guava.common.collect.RegularImmutableMap.fromEntryArray(RegularImmutableMap.java:110)
at com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:393)
at com.datastax.oss.driver.api.core.session.ProgrammaticArguments$Builder.build(ProgrammaticArguments.java:418)
at com.datastax.oss.driver.api.core.session.SessionBuilder.buildDefaultSessionAsync(SessionBuilder.java:844)
at com.datastax.oss.driver.api.core.session.SessionBuilder.buildAsync(SessionBuilder.java:817)
at com.datastax.oss.driver.api.core.session.SessionBuilder.build(SessionBuilder.java:835)
at org.springframework.data.cassandra.config.CqlSessionFactoryBean.buildSystemSession(CqlSessionFactoryBean.java:539)
at org.springframework.data.cassandra.config.CqlSessionFactoryBean.afterPropertiesSet(CqlSessionFactoryBean.java:473)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)
... 94 common frames omitted
To explain a little bit I am using different ports since they are different containers. They show up in peers table so I think the servers are configured right but if there is an easier way to do multiple ports without the custom builder I am good with that too.
Источник: https://stackoverflow.com/questions/781 ... and-defaul