【问题标题】:Connect to 2 cassandra clusters in spring data在 spring 数据中连接到 2 个 cassandra 集群
【发布时间】:2019-10-31 07:19:10
【问题描述】:

我正在尝试使用 spring data cassandra 连接到 2 个不同的 cassandra 集群。但它总是只使用第一个 cassandra 集群配置。第二个没有影响。知道我在做什么错吗?这是我正在使用的配置:

第一个 cassandra 集群配置:

@Configuration
@EnableCassandraRepositories(
        basePackageClasses = SourceRepository.class
)
public class SourceCassandraConfig extends AbstractCassandraConfiguration {

    @Override
    public String getContactPoints() {
        return "localhost";
    }

    @Override
    public int getPort() {
        return "9051";
    }

    @Override
    protected String getKeyspaceName() {
        return "source_keyspace";
    }
}

第二个 cassandra 集群配置:

@Configuration
@EnableCassandraRepositories(
        basePackageClasses = TargetRepository.class,
        cassandraTemplateRef = "targetCassandraTemplate"
)
public class TargetCassandraConfig extends AbstractCassandraConfiguration {

    @Override
    public String getContactPoints() {
        return "localhost";
    }

    @Override
    public int getPort() {
        return "9052";
    }

    @Override
    protected String getKeyspaceName() {
        return "target_keyspace";
    }

    @Override
    @Bean("targetSession")
    public CassandraSessionFactoryBean session() throws ClassNotFoundException {
        final CassandraSessionFactoryBean session = super.session();
        session.setKeyspaceName(getKeyspaceName());
        session.setCluster(cluster().getObject());
        return session;
    }

    @Override
    public CassandraCqlClusterFactoryBean cluster() {
        CassandraCqlClusterFactoryBean cluster = super.cluster();
        cluster.setContactPoints(contactPoints);
        cluster.setPort(port);
        return cluster;
    }

    @Bean("targetCassandraTemplate")
    public CassandraAdminOperations cassandraTemplate(
            @Qualifier("targetSession") final CassandraSessionFactoryBean session) throws Exception {
        return new CassandraAdminTemplate(session.getObject(), cassandraConverter());
    }
}

我总是看到只有第一个集群节点被添加

com.datastax.driver.core.Cluster         : New Cassandra host localhost/127.0.0.1:9051 added

我做错了什么?

【问题讨论】:

    标签: cassandra spring-data spring-data-cassandra


    【解决方案1】:

    我花了 2 天时间调试这个问题,在发布这个问题 10 分钟后,我找到了解决方法:)

    我没有使用我在会话 bean 中正确创建的集群 bean。所以我做了以下事情并且成功了:

        @Override
        @Bean("targetCassandraCluster")
        public CassandraCqlClusterFactoryBean cluster() {
            CassandraCqlClusterFactoryBean cluster = super.cluster();
            cluster.setContactPoints(contactPoints);
            cluster.setPort(port);
            return cluster;
        }
    
        @Bean("targetCassandraSession")
        public CassandraSessionFactoryBean session(
                @Qualifier("targetCassandraCluster") final CassandraCqlClusterFactoryBean cluster
        ) throws ClassNotFoundException {
            final CassandraSessionFactoryBean session = super.session();
            session.setKeyspaceName(getKeyspaceName());
            session.setCluster(cluster.getObject());
            return session;
        }
    
        @Bean("targetCassandraTemplate")
        public CassandraAdminOperations cassandraTemplate(
                @Qualifier("targetCassandraSession") final CassandraSessionFactoryBean session) throws Exception {
            return new CassandraAdminTemplate(session.getObject(), cassandraConverter());
        }
    

    【讨论】:

      猜你喜欢
      • 2020-12-23
      • 2020-10-04
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 2017-05-20
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多