gpt4 book ai didi

cassandra - 删除 Cassandra 连接作为硬 Spring 启动依赖项

转载 作者:行者123 更新时间:2023-12-05 07:56:31 25 4
gpt4 key购买 nike

我正在将 Spring Data 与 Cassandra 结合使用,并希望在错误预防和处理方面尽可能具有弹性。目前,我们通过使用我们自己的创建嵌套实例(有效代理)的实现实现接口(interface)来包装我们的 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 实现中的所有代理方法都通过一个同步块(synchronized block)访问 cassandraSession 字段,该 block 检查它是否存在,如果不存在则创建连接,捕获 Spring 启动范围之外的任何异常。

想知道是否有更巧妙的方法来实现这一目标。 datastax 的 native 驱动程序或 spring-data 的一个被忽视的功能将是理想的。

非常感谢:)

最佳答案

session 是一个接口(interface)。为什么不直接构造一个构造Session实例的SessionBuilder呢?然后,您可以让它返回一个基本的 Cassandra session ,直到您需要其他东西为止。

上述解决方案通常是面向对象设计的最佳实践。

关于cassandra - 删除 Cassandra 连接作为硬 Spring 启动依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28611694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com