我正在使用 cassandra1.2 和 datastax java 客户端 1.0.3 使用来自 datastax 的 java 客户端示例我创建了一个类,它将返回会话
public class DataStaxPlugin {
public static final Logger LOGGER = Logger.getLogger(DataStaxPlugin.class.getName());
private static Cluster cluster;
private static Session session = null;
private static String node;
private static String port;
private static DataStaxPlugin instance = null;
protected DataStaxPlugin() {
// Exists only to defeat instantiation.
}
public void connect() {
node = ReadPropertiesFile.getProperty("db.server.name");
port = ReadPropertiesFile.getProperty("db.server.port");
LOGGER.debug("Connecting to DB server: " + node);
LOGGER.debug("port: " + port);
cluster = Cluster.builder().withPort(Integer.parseInt(port))
.addContactPoint(node).build();
Metadata metadata = cluster.getMetadata();
System.out.printf("Connected to cluster: %s\n",
metadata.getClusterName());
for (Host host : metadata.getAllHosts()) {
System.out.printf("Datatacenter: %s; Host: %s; Rack: %s\n",
host.getDatacenter(), host.getAddress(), host.getRack());
}
session = cluster.connect();
}
public void close() {
cluster.shutdown();
}
public static Session getDataStaxSession() {
synchronized (DataStaxPlugin.class) {
try {
if (instance == null) {
instance = new DataStaxPlugin();
instance.connect();
}
return session;
} finally {
}
}
}
}
我使用 getDatastaxSession 函数来获取会话并在数据库中进行一次插入。前几个插入工作正常,但一段时间后我得到空指针异常,如下所示:
Exception in thread "Cassandra Java Driver worker-5" java.lang.NullPointerException
at com.datastax.driver.core.Connection$Future.onException(Connection.java:602)
at com.datastax.driver.core.RequestHandler.setFinalException(RequestHandler.java:219)
at com.datastax.driver.core.RequestHandler.sendRequest(RequestHandler.java:103)
at com.datastax.driver.core.RequestHandler$1.run(RequestHandler.java:170)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
此异常是否由于 Session 为空/超时?如果我以错误的方式创建或管理会话,请告诉我。或者,如果我的代码有任何问题,请告诉我。