Внедрение пользовательского datastax.session в Spring-Data Cassandra - PullRequest
0 голосов
/ 11 января 2019

Можно ли использовать собственный сеанс сбора данных для Spring-Data?

Привет, я знаю, что Spring-Data для Cassandra использует сессию datastax для внутреннего использования. Однако у меня есть пользовательский объект сеанса datastax (предоставленный другой службой), который я бы хотел использовать Spring-Data вместо предварительно настроенного. Предполагая, что версии обоих сессий datastax одинаковы, возможно ли это?

1 Ответ

0 голосов
/ 13 января 2019

Да, это возможно.

В зависимости от вашей настройки, есть несколько подходов. Позвольте мне объяснить два наиболее распространенных сценария:

Прямое использование Template API

Session yourSession = …;

CqlTemplate cqlTemplate = new CqlTemplate(yourSession);

CassandraTemplate cassandraTemplate = new CassandraTemplate(yourSession);

Представление сеанса как @Bean

Для этого может потребоваться дополнительная настройка, поскольку поддержка конфигурации предполагает использование CassandraSessionFactoryBean и CassandraClusterFactoryBean.

Взгляните на AbstractCassandraConfiguration, чтобы узнать, какие поддерживающие компоненты (CassandraConverter, CassandraMappingContext) настроены для настройки поддержки Cassandra в Spring Data.

@Configuration
class MyCassandraConfig {

    private final Session mySession;

    public MyCassandraConfig(Session mySession) {
        this.mySession = mySession;
    }

    @Bean
    public CassandraConverter cassandraConverter() {

        MappingCassandraConverter mappingCassandraConverter = new MappingCassandraConverter(cassandraMapping());

        mappingCassandraConverter.setCustomConversions(customConversions());

        return mappingCassandraConverter;
    }

    @Bean
    public CassandraMappingContext cassandraMapping() {

        Cluster cluster = mySession.getCluster();
        String keyspace = mySession.getLoggedKeyspace();

        CassandraMappingContext mappingContext = new CassandraMappingContext(
                new SimpleUserTypeResolver(cluster, keyspace), new SimpleTupleTypeFactory(cluster));

        CustomConversions customConversions = customConversions();

        mappingContext.setCustomConversions(customConversions);
        mappingContext.setSimpleTypeHolder(customConversions.getSimpleTypeHolder());

        return mappingContext;
    }

    @Bean
    public CustomConversions customConversions() {
        return new CassandraCustomConversions(Collections.emptyList());
    }

    @Bean
    public CassandraTemplate cassandraTemplate() {
        return new CassandraTemplate(mySession, cassandraConverter());
    }
}
...