Cassandra会话在运行时为null

时间:2017-09-12 08:11:58

标签: cassandra spring-data-cassandra

我有以下问题:我想从会话列表开始列出Cassandra模板。但问题是在运行时我得到会话对象为空。 我使用的代码如下:

def max_zeros(c):
    v = c.values != 0
    d = np.diff(np.flatnonzero(np.diff(np.concatenate([[True], v]))))
    return d[::2].max()

df.apply(max_zeros)

col0    6
col1    3
dtype: int64

我从服务器得到以下答案:

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.cassandra.config.CassandraClusterFactoryBean;
import org.springframework.data.cassandra.config.CassandraSessionFactoryBean;
import org.springframework.data.cassandra.config.SchemaAction;
import org.springframework.data.cassandra.convert.CassandraConverter;
import org.springframework.data.cassandra.core.CassandraOperations;
import org.springframework.data.cassandra.core.CassandraTemplate;
import org.springframework.stereotype.Component;

@Component
public class KeyspaceSession {

    @Autowired
    @Qualifier("cluster")
    CassandraClusterFactoryBean cluster;

    @Autowired
    @Qualifier("converter")
    CassandraConverter converter;


    public List<CassandraOperations> getTemplates(){
        List<CassandraOperations> listOfTemplates = new ArrayList<>();
        for(CassandraKeyspaces keyspace : CassandraKeyspaces.values()){
            CassandraSessionFactoryBean session = new CassandraSessionFactoryBean();
            session.setCluster(cluster.getObject());
            session.setKeyspaceName(keyspace.getKeyspace());
            session.setConverter(converter);
            session.setSchemaAction(SchemaAction.CREATE_IF_NOT_EXISTS); 
            CassandraOperations op = new CassandraTemplate(session.getObject());
            listOfTemplates.add(op);
        }
        return listOfTemplates;
    }

}

2 个答案:

答案 0 :(得分:1)

在您设置了所有属性后,

CassandraSessionFactoryBean需要初始化。在获得CassandraSessionFactoryBean.afterPropertiesSet()之前致电Session。您还需要清除应用程序关闭时的会话。

理想情况下,您需要为要创建的每个BeanDefinitionSession bean注册CassandraOperations

参考文献:

答案 1 :(得分:0)

我还没有和Spring一起工作过,所以请原谅我,如果我错过了什么。但是我没有看到你设置了任何联系点,所以驱动程序将如何知道要查询的集群?

试试这个:

bindParam