首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将定制的datastax.session注入Spring-Data Cassandra

将定制的datastax.session注入Spring-Data Cassandra
EN

Stack Overflow用户
提问于 2019-01-11 08:09:19
回答 1查看 540关注 0票数 0

是否可以对Spring-Data使用自定义的datastax会话?

嗨,我知道Cassandra的Spring-Data在内部使用datastax会话。但是,我有一个自定义的datastax会话对象(由另一个服务提供),我希望Spring-Data使用它,而不是预先连接的那个。假设两个datastax会话的版本相同,这可能吗?

EN

回答 1

Stack Overflow用户

发布于 2019-01-13 23:55:41

是的,这是可能的。

根据您的设置,有几种方法。让我解释两个最常见的场景:

模板接口直接使用

代码语言:javascript
复制
Session yourSession = …;

CqlTemplate cqlTemplate = new CqlTemplate(yourSession);

CassandraTemplate cassandraTemplate = new CassandraTemplate(yourSession);

将会话公开为 @Bean

由于配置支持需要使用CassandraSessionFactoryBeanCassandraClusterFactoryBean,因此这可能需要更多的设置。

看看AbstractCassandraConfiguration,看看配置了哪些支持bean (CassandraConverterCassandraMappingContext)来配置Spring Data的Cassandra支持。

代码语言:javascript
复制
@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());
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54138703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档