Подключите к 2 кластерам кассандры в весенних данных - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь подключиться к 2 различным кластерам кассандры с использованием весенних данных кассандры. Но он всегда использует только первый конфиг кластера Кассандры. Второй не влияет. Есть идеи, что я делаю не так? Это конфиг, который я использую:

Первая конфигурация кластера Кассандры:

@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";
    }
}

Конфигурация второго кластера Кассандры:

@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

Что я делаю не так?

1 Ответ

0 голосов
/ 17 июня 2019

Я потратил 2 дня на отладку этого и через 10 минут после публикации этого вопроса я нашел исправление:)

Я не использовал компонент EJB, который я правильно создал в компоненте сеанса.Поэтому я сделал следующее, и это сработало:

    @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());
    }
...