如何在 Javalin 应用程序中创建长期存在的 cassandra CqlSession

问题描述

我有一个使用 Javalin(Java 中的简单 HTTP 框架)构建的应用,它利用 Cassandra 作为后端。

根据 Datastax 文档 https://docs.datastax.com/en/developer/java-driver/4.9/manual/core/#quick-start

CqlSession 是驱动程序的主要入口点。它保存了实际 Cassandra 集群的已知状态,并且是您用来执行查询的。它是线程安全的,您应该创建一个实例(每个目标 Cassandra 集群),并在整个应用程序中共享它;

这就是我的 main 函数的样子:

  public static void main(String[] args) {
    CqlSession cqlSession = CqlSession.builder().build();
    runcassandraMigration(cqlSession);
    Javalin app =
        Javalin.create(config -> config.registerPlugin(new OpenApiPlugin(getopenApiOptions())))
            .start(PORT);
    Handlers handlers = new Handlers(cqlSession);
    registerappRoutes(app,handlers);
  }

Handlers 类包含如下句柄函数

public class Handlers {
  private final CqlSession session;
  
  public Context getAllUsers(Context ctx) {
    ResultSet rs = session.execute("select * from my_status.users");
    List<Row> rows = rs.all();
    return ctx.json(rows.stream().map(this::rowToUser).collect(Collectors.toList()));
  }
}

但是,在我启动应用程序并在本地访问 REST 端点后,我得到了

java.lang.IllegalStateException: Session is closed

我想知道如何创建一个长期存在的 CqlSession 而不是每个请求的短期存在。我正在开发的应用程序可以在 https://github.com/YikSanChan/mystatus/tree/main/api/src/main/java 中找到。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)