将自定义 datastax.session 注入 Spring-Data Cassandra



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

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

是的,这是可能的。

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

直接使用模板接口

Session yourSession = …;
CqlTemplate cqlTemplate = new CqlTemplate(yourSession);
CassandraTemplate cassandraTemplate = new CassandraTemplate(yourSession);

将会话公开为@Bean

这可能需要更多设置,因为配置支持需要使用 CassandraSessionFactoryBeanCassandraClusterFactoryBean

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

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

相关内容

  • 没有找到相关文章

最新更新