运行时 Cassandra 会话为空
Cassandra session null at runtime
我有以下问题:我想从会话列表开始制作 Cassandra 模板列表。但是问题是在运行时我得到会话对象为空。
我使用的代码如下:
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;
}
}
我从服务器得到以下答案:
{
"timestamp": 1505204641753,
"status": 500,
"error": "Internal Server Error",
"exception": "java.lang.IllegalArgumentException",
"message": "Session must not be null",
"path": "/getUser/10/pl"
}
我之前没有与 Spring 合作过,所以如果我遗漏了什么,请原谅我。但是我没有看到您设置任何联系点,所以驱动程序如何知道要查询哪个集群?
试试这个:
cluster.setContactPoints(<cassandra_server_ip>);
CassandraSessionFactoryBean
需要在设置所有属性后进行初始化。在获取 Session
之前调用 CassandraSessionFactoryBean.afterPropertiesSet()
。您还需要在应用程序关闭时清理会话。
理想情况下,您将为每个要创建的 Session
和 CassandraOperations
bean 注册 BeanDefinition
。
参考文献:
- Add Bean Programmatically to Spring Web App Context
- How to Create Your Own 'Dynamic' Bean Definitions in Spring
我有以下问题:我想从会话列表开始制作 Cassandra 模板列表。但是问题是在运行时我得到会话对象为空。 我使用的代码如下:
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;
}
}
我从服务器得到以下答案:
{
"timestamp": 1505204641753,
"status": 500,
"error": "Internal Server Error",
"exception": "java.lang.IllegalArgumentException",
"message": "Session must not be null",
"path": "/getUser/10/pl"
}
我之前没有与 Spring 合作过,所以如果我遗漏了什么,请原谅我。但是我没有看到您设置任何联系点,所以驱动程序如何知道要查询哪个集群?
试试这个:
cluster.setContactPoints(<cassandra_server_ip>);
CassandraSessionFactoryBean
需要在设置所有属性后进行初始化。在获取 Session
之前调用 CassandraSessionFactoryBean.afterPropertiesSet()
。您还需要在应用程序关闭时清理会话。
理想情况下,您将为每个要创建的 Session
和 CassandraOperations
bean 注册 BeanDefinition
。
参考文献:
- Add Bean Programmatically to Spring Web App Context
- How to Create Your Own 'Dynamic' Bean Definitions in Spring