у меня есть два пространства клавиш. один из них создан идеально, а другой - только с помощью SimpleReplication. Когда я создаю его с сетевой репликацией, он создается, но когда я описываю пространство клавиш в cql sh, он возвращает:
Объект 'NoneType' не имеет атрибута 'export_for_schema'
Но пространство клавиш с Сетевая репликация может быть создана из cql sh. В весенних логах все выглядит нормально
[CREATE KEYSPACE IF NOT EXISTS a_events_local WITH replication = { 'class' : 'NetworkTopologyStrategy', 'dс1' : 3, 'dс2' : 3 }
My Cassandra Config
public abstract class CassandraConfig extends AbstractCassandraConfiguration {
@Value("${cassandra.host}")
private String host;
@Value("${cassandra.port}")
private int port;
@Value("${cassandra.user}")
private String usr;
@Value("${cassandra.psswd}")
private String psswd;
@Value("${cassandra.keyspace.a}")
private String keyspaceA;
@Value("${cassandra.keyspace.b}")
private String keyspaceB;
@Override
@Bean
public CassandraClusterFactoryBean cluster() {
CassandraClusterFactoryBean cluster =
new CassandraClusterFactoryBean();
cluster.setContactPoints(host);
cluster.setPort(port);
cluster.setUsername(usr);
cluster.setPassword(psswd);
cluster.setKeyspaceCreations(getKeyspaceCreations());
cluster.setJmxReportingEnabled(false);
return cluster;
}
@Override
protected String getContactPoints() {
return host;
}
@Override
protected int getPort() {
return port;
}
@Override
public SchemaAction getSchemaAction() {
return SchemaAction.NONE;
}
@Override
protected List<CreateKeyspaceSpecification> getKeyspaceCreations() {
return Arrays.asList(getAKeySpaceSpecification(), getBKeySpaceSpecification());
}
private CreateKeyspaceSpecification getAKeySpaceSpecification() {
return CreateKeyspaceSpecification.createKeyspace(keyspaceA)
.ifNotExists(true)
//.withSimpleReplication(3);
.withNetworkReplication(DataCenterReplication.of("dс1", 3) , DataCenterReplication.of("dс2", 3));
}
private CreateKeyspaceSpecification getBKeySpaceSpecification() {
return CreateKeyspaceSpecification.createKeyspace(keyspaceB)
.ifNotExists(true)
.withNetworkReplication(DataCenterReplication.of("dc1", 3), DataCenterReplication.of("dc2", 3));
}
Конфигурация Keyspace A
@Configuration
@EnableCassandraRepositories(
cassandraTemplateRef = "keyspaceACassandraTemplate")
public class CassandraDDConfig extends CassandraConfig {
@Value("${cassandra.keyspace.a}")
private String keyspace;
@Value("${cassandra.a-entities-package}")
private String aEntityPackage;
@Override
@Bean("keyspaceDDSession")
public CassandraSessionFactoryBean session() {
CassandraSessionFactoryBean session = new CassandraSessionFactoryBean();
session.setCluster(cluster().getObject());
session.setConverter(cassandraConverter());
session.setKeyspaceName(getKeyspaceName());
session.setSchemaAction(getSchemaAction());
session.setStartupScripts(getStartupScripts());
session.setShutdownScripts(getShutdownScripts());
return session;
}
@Override
@Bean("keyspaceACassandraTemplate")
public CassandraAdminTemplate cassandraTemplate() throws Exception {
return new CassandraAdminTemplate(this.session().getObject(), cassandraConverter());
}
@Override
protected String getKeyspaceName() {
return keyspace;
}
@Override
public String[] getEntityBasePackages() {
return new String[] {aEntityPackage};
}
}
Конфигурация Keyspace B
@Configuration
@EnableCassandraRepositories(
cassandraTemplateRef = "keyspaceBCassandraTemplate")
public class CassandraSparkConfig extends CassandraConfig {
@Value("${cassandra.keyspace.b}")
private String keyspace;
@Value("${cassandra.b-entities-package}")
private String dcEntityPackage;
@Override
@Bean("keyspaceBSession")
public CassandraSessionFactoryBean session() {
CassandraSessionFactoryBean session = new CassandraSessionFactoryBean();
session.setCluster(cluster().getObject());
session.setConverter(cassandraConverter());
session.setKeyspaceName(getKeyspaceName());
session.setSchemaAction(getSchemaAction());
session.setStartupScripts(getStartupScripts());
session.setShutdownScripts(getShutdownScripts());
return session;
}
@Override
@Bean("keyspaceSparkCassandraTemplate")
public CassandraAdminTemplate cassandraTemplate() throws Exception {
return new CassandraAdminTemplate(this.session().getObject(), cassandraConverter());
}
@Override
protected String getKeyspaceName() {
return keyspace;
}
@Override
public String[] getEntityBasePackages() {
String[] entities = new String[1];
if(saveAll){
entities[0] = bEntityPackage;
}
return entities;
}
}