我正在将 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 的一个被忽视的功能将是理想的。
非常感谢 :)