繁体   English   中英

在 Spring 引导中处理 Datastax Java 驱动程序 CqlSession

[英]Handling Datastax Java driver CqlSession in Spring Boot

Datastax Java 驱动程序文档说,为您的 Spring 引导应用程序创建一个 CqlSession 实例,因为构建 session 是一项昂贵的操作。

我想在 Spring Boot 中以有效的方式管理 CqlSession,以便 CqlSession 实例应该关闭而不是保持打开状态,以释放底层资源(TCP 连接、线程池......)。

驱动程序文档 URL: https://docs.datastax.com/en/developer/java-driver/4.13/manual/core/

这是我的 CqlSession 实例 class。 我使用 Cqlsession 实例在我的 Spring 引导应用程序中运行 Cql 查询,方法是将其作为依赖项注入到我的 @Service 和 @Repository 类中。

此外,我从不手动关闭我的 Cql session,而是让 Spring 使用 @PreDestory 注释处理它。 是否应该在执行 cql 查询后立即关闭 session 还是应该允许 spring 如下代码中所述处理它? 我已经意识到这样做,再次构建 cqlsession 需要大约 1-1.5 秒的延迟,因此查询运行速度非常慢。

@Configuration 
public class CqlSessionInstance {
    
        private CqlSession session;
    
        @PostConstruct
        private void initSession() {
            getSession();
        }
    
        public final CqlSession getSession() {
            if(session == null || session.isClosed()) {
                session = CqlSession.builder().build();
            }
            return session;
        }
    
        @PreDestroy
        public final void closeSession() {
            if (session != null && !session.isClosed()) session.close();
        }
    
    }

让我知道是否有更好的方法来管理 Spring 引导中的 CqlSession

在我看来,我建议您自己关闭CqlSession ,因为您知道何时作为特定请求执行,并且知道何时关闭它。

如果您使用注释@PreDestroy ,您将依赖于 Spring 生命周期管理,因此很难确定“何时”您的组件将被销毁,因此您的 session 已关闭。

我陷入了同样的困境,何时关闭 session? 在销毁前还是在每个请求之后?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM