【发布时间】:2015-04-21 02:40:47
【问题描述】:
我将 Spring Data 与 Cassandra 一起使用,并希望在错误预防和处理方面尽可能具有弹性。目前,我们通过使用我们自己的实现来包装我们的com.datastax.cassandra.Session,该实现创建一个嵌套实例(实际上是一个代理),如下所示:
private class CassandraSessionProxy implements Session {
private Session cassandraSession;
private Session cassandraSession() {
if (cassandraSession != null) {
return cassandraSession;
} else {
synchronized (this) {
try {
cassandraSession = createCassandraSession();
return cassandraSession;
} catch (Exception e) {
LOGGER.error("An error happened but after Spring's container started", e);
}
}
}
}
// implement Session methods, proxying to cassandraSession field
@Override
public void close() {
cassandraSession().close();
}
}
我们的 Session 实现中的所有代理方法都通过一个同步块访问 cassandraSession 字段,该块检查它是否存在,如果不存在则创建连接,捕获 Spring 启动范围之外的任何异常。
好奇是否有更巧妙的方法来实现这一点。 datastax 的本机驱动程序或 spring-data 的一个被忽视的功能将是理想的。
非常感谢:)
【问题讨论】:
-
与该场景不同,异常是暂时的,我希望应用程序在 Cassandra 重新上线后仍能正常启动和运行
标签: cassandra spring-data datastax datastax-java-driver spring-data-cassandra