无法使用NetworkReplication和spring数据创建第二个cassandra密钥空间

无法使用NetworkReplication和spring数据创建第二个cassandra密钥空间,cassandra,spring-data-cassandra,Cassandra,Spring Data Cassandra,我有两个键空间。其中一个是完美创建的,而另一个是通过简单复制创建的。当我使用网络复制创建它时,它会被创建,但当我创建它时 描述它返回的cqlsh中的键空间: “NoneType”对象没有属性“export\u for\u schema” 但是可以从cqlsh创建具有网络复制的密钥空间。 在春天,一切看起来都很好 [CREATE KEYSPACE IF NOT EXISTS a_events_local WITH replication = { 'class' : 'NetworkTopolog

我有两个键空间。其中一个是完美创建的,而另一个是通过简单复制创建的。当我使用网络复制创建它时,它会被创建,但当我创建它时 描述它返回的cqlsh中的键空间:

“NoneType”对象没有属性“export\u for\u schema”

但是可以从cqlsh创建具有网络复制的密钥空间。 在春天,一切看起来都很好

 [CREATE KEYSPACE IF NOT EXISTS a_events_local WITH replication = { 'class' : 'NetworkTopologyStrategy', 'dс1' : 3, 'dс2' : 3 }
我的卡桑德拉

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));
    }
键空间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;
    }
}

最后,我使用GetStartupScript创建键空间。它可以工作,数据可以写入相应的表中,也可以从相应的表中读取

@Override
    @Bean
    public CassandraClusterFactoryBean cluster() {
        CassandraClusterFactoryBean cluster =
                new CassandraClusterFactoryBean();
        cluster.setContactPoints(host);
        cluster.setPort(port);
        cluster.setUsername(usr);
        cluster.setPassword(psswd);
        cluster.setStartupScripts(getStartupScripts());
        cluster.setJmxReportingEnabled(false);
        cluster.setMetricsEnabled(false);


@Override
    protected List<String> getStartupScripts() {
        final String scriptCreateAkeyspace =
                "CREATE KEYSPACE IF NOT EXISTS "
                        + keyspaceA
                        + " WITH durable_writes = true"
                        + " AND replication = {'class' : 'NetworkTopologyStrategy', 'dc1' : 3, 'dc2' : 1 };";

        final String scriptCreateSparkKeyspace = "CREATE KEYSPACE IF NOT EXISTS "
                + keyspaceB
                + " WITH durable_writes = true"
                + " AND replication = {'class' : 'NetworkTopologyStrategy', 'dc1' : 1, 'dc2' : 3 };";

        return Arrays.asList(scriptCreateAkeyspace, scriptCreateBKeyspace);
    }
@覆盖
@豆子
公共CassandracClusterFactoryBean集群(){
CassandraClusterFactoryBean簇=
新的CassandraClusterFactoryBean();
群集设置触点(主机);
集群设置端口(端口);
setUsername(usr);
cluster.setPassword(psswd);
setStartupScript(getStartupScript());
cluster.setJmxReportingEnabled(false);
cluster.setMetricsEnabled(false);
@凌驾
受保护列表getStartupScripts(){
最终字符串scriptCreateAkeyspace=
“如果不存在,则创建键空间”
+键空间
+“使用持久的_writes=true”
+“和复制={'class':'NetworkTopologyStrategy','dc1':3,'dc2':1};”;
最终字符串scriptCreateSparkKeyspace=“如果不存在,则创建键空间”
+键空间B
+“使用持久的_writes=true”
+“和复制={'class':'NetworkTopologyStrategy','dc1':1,'dc2':3};”;
返回Arrays.asList(scriptCreateAkeyspace、scriptCreateBKeyspace);
}

节点醇描述集群显示了什么?集群信息:名称:cassandra Snitch:org.apache.cassandra.locator.GossipingPropertyFileSnitch DynamicPointSnitch:enabled Partitioner:org.apache.cassandra.dht.Murruel3Partitioner架构版本:8ff4a796-ce40-33e6-b19d-07f9d91d2j9b:[10.244.13.140,10.244.11.141,10.244.9.142,10.244.7.40,10.244.12.43,10.244.8.44]好的。我还以为你有架构不一致。。。
@Override
    @Bean
    public CassandraClusterFactoryBean cluster() {
        CassandraClusterFactoryBean cluster =
                new CassandraClusterFactoryBean();
        cluster.setContactPoints(host);
        cluster.setPort(port);
        cluster.setUsername(usr);
        cluster.setPassword(psswd);
        cluster.setStartupScripts(getStartupScripts());
        cluster.setJmxReportingEnabled(false);
        cluster.setMetricsEnabled(false);


@Override
    protected List<String> getStartupScripts() {
        final String scriptCreateAkeyspace =
                "CREATE KEYSPACE IF NOT EXISTS "
                        + keyspaceA
                        + " WITH durable_writes = true"
                        + " AND replication = {'class' : 'NetworkTopologyStrategy', 'dc1' : 3, 'dc2' : 1 };";

        final String scriptCreateSparkKeyspace = "CREATE KEYSPACE IF NOT EXISTS "
                + keyspaceB
                + " WITH durable_writes = true"
                + " AND replication = {'class' : 'NetworkTopologyStrategy', 'dc1' : 1, 'dc2' : 3 };";

        return Arrays.asList(scriptCreateAkeyspace, scriptCreateBKeyspace);
    }