使用Spring Data Cassandra对多个名称空间运行查询

时间:2017-08-29 07:27:32

标签: cassandra spring-data spring-data-cassandra

有没有什么方法可以使用Spring Data在Cassandra的所有键空间上执行查询?

1 个答案:

答案 0 :(得分:3)

这个答案有两个部分:

  1. 使用Spring Data Cassandra 1.x时,您需要为要使用的每个键空间设置单独的CassandraTemplate个实例。
  2. 使用Spring Data Cassandra 2.x,我们引入了SessionFactory接口来控制要使用的Session。我们随routing SessionFactory support一起提供,因此您可以提供多个会话和一个鉴别器(通常基于ThreadLocal)来选择适当的Session
  3. 2.0的一些示例代码如下所示:

    class MyRoutingSessionFactory extends AbstractRoutingSessionFactory {
    
        ThreadLocal<String> lookupKey = ThreadLocal.withInitial(() -> "default-session");
    
        void setLookupKey(String lookupKey) {
            this.lookupKey.set(lookupKey);
        }
    
        @Override
        protected Object determineCurrentLookupKey() {
            return lookupKey.get();
        }
    }
    
    class MyConfig extends AbstractCassandraConfiguration {
    
        @Bean
        @Override
        public SessionFactory sessionFactory() {
    
            MyRoutingSessionFactory factory = new MyRoutingSessionFactory();
            factory.setDefaultTargetSessionFactory(getRequiredSession());
    
            MapSessionFactoryLookup lookup = new MapSessionFactoryLookup();
    
            Session myOtherSession = …;
    
            lookup.addSessionFactory("default-session", getRequiredSession());          
            lookup.addSessionFactory("my-other-session", myOtherSession);
    
            factory.setSessionFactoryLookup(lookup);
    
            return factory;
        }
    
        // …
    }