【问题标题】:Injecting custom datastax.session into Spring-Data Cassandra将自定义 datastax.session 注入 Spring-Data Cassandra
【发布时间】:2019-06-05 21:56:33
【问题描述】:

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

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

【问题讨论】:

    标签: cassandra spring-data datastax datastax-java-driver spring-data-cassandra


    【解决方案1】:

    是的,这是可能的。

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

    模板 API 的直接使用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-11
      • 2017-03-26
      • 2020-12-02
      • 2014-04-17
      • 2018-01-11
      • 2014-02-23
      • 2019-10-04
      • 2015-04-18
      相关资源
      最近更新 更多