【问题标题】:JDBC session for embedded jetty (Version above 9.4)嵌入式码头的 JDBC 会话(9.4 以上版本)
【发布时间】:2020-10-21 01:24:41
【问题描述】:

我正在尝试为嵌入式码头服务器实现 jdbc 会话,以便在 openshift 环境中跨节点共享会话(以避免用户在部署发生时丢失会话)。现有的官方文档 (https://www.eclipse.org/jetty/documentation/9.4.32.v20200930/configuring-sessions-jdbc.html) 仅包含 Jetty 分发实现的实现细节。 How to setup embeded Jetty to use JDBC sessions 有一个类似但不完整的解决方案

// Configure a JDBCSessionDataStoreFactory.
JDBCSessionDataStoreFactory sessionDataStoreFactory = new JDBCSessionDataStoreFactory();
sessionDataStoreFactory.setGracePeriodSec(3600);
sessionDataStoreFactory.setSavePeriodSec(0);
sessionDataStoreFactory.setDatabaseAdaptor(...);

JDBCSessionDataStore.SessionTableSchema schema = new JDBCSessionDataStore.SessionTableSchema();
schema.setAccessTimeColumn("accessTime");
schema.setContextPathColumn("contextPath");
// ... more configuration here
sessionDataStoreFactory.setSessionTableSchema(schema);

// Add the SessionDataStoreFactory as a bean on the server.
server.addBean(sessionDataStoreFactory);

这里不清楚如何创建 DatabaseAdaptor 对象。有人可以帮忙吗?

【问题讨论】:

    标签: embedded-jetty session-management


    【解决方案1】:

    创建 DatabaseAdaptor 非常简单。这是一个例子:

    DatabaseAdaptor driverAdaptor = new DatabaseAdaptor();
    driverAdaptor.setDriverInfo("com.mysql.jdbc.Driver",
                                "jdbc:mysql://127.0.0.1:3306/sessions?user=sessionsadmin");
    

    这就是使用驱动程序类创建一个真正需要做的所有事情。还有其他选项可用于传递 javax.sql.DataSource 或 jndi 字符串以查找以获取 javax.sql.DataSource。但是使用驱动类和jdbc字符串是很常见的。

    您实际上不必在 DatabaseAdapter 上设置任何其他内容,因为它会尝试从连接返回的元数据中找出它需要什么来处理数据库之间发生变化的事情。一些在数据库之间发生变化的例子是一些 sql 类型的名称,如字符串、long 和 blob。例如,对于 Oracle,long 是 number(20),但对于其他数据库,它是 bigint。在 DatabaseAdapter 无法解决的情况下,您可能需要明确告诉它这些类型名称是什么,但在大多数情况下,DatabaseAdapter 能够解决。

    【讨论】:

      猜你喜欢
      • 2019-06-21
      • 2013-12-25
      • 2014-02-25
      • 2019-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      相关资源
      最近更新 更多