如何使用JOOQ刷新数据库连接

时间:2017-02-28 17:41:44

标签: java sql jdbc jooq

我有一个用例,我们必须使用集群中一个节点上的更改静默替换db到另一个节点。另一个节点不应重新启动进程,但应刷新数据库连接,以便在替换db文件(SQLite)时获取新的更改。有没有办法在JOOQ中这样做?我没有找到任何相关的API来刷新数据库连接。

我尝试了以下操作,但我遇到了僵局 -

public static void closeDBConnection(Configuration config) {
    try {
        Connection connection = getDBConnection(config);
        config.connectionProvider().release(connection);

        if (!connection.isClosed()) {
            connection.close();
        }
    } catch(SQLException ex) {
    //   throw new ReAttachException();
    }
}

public static Connection getDBConnection(Configuration config) {
    return config.connectionProvider().acquire();
}

在调用方法中 -

private void reattach(FooRecord record, Configuration config) {
    record.detach();

    DBUtils.closeDBConnection(config);
    DBUtils.getDBConnection(config);

    record.attach(config);
}

1 个答案:

答案 0 :(得分:1)

jOOQ不会为您管理您的连接,您必须自己,或使用您的JDBC驱动程序或连接池的功能。

特别是,在您当前的尝试中,您正在调用jOOQ的SPI ConnectionProvider,您不应该调用它。 SPI用于实现和jOOQ到使用和调用。这意味着您的实现应该已经处理了连接替换,并且jOOQ不应该注意到这一点:

class MyConnectionProvider implements ConnectionProvider {
    @Override
    public Connection acquire() {
        // Do your own reconnection magic here
        connection = ...

        // Pass this connection to jOOQ. jOOQ should assume it will always work.
        return connection;
    }

    @Override
    public void release(Connection connection) {
        // Close or return to the pool, etc.
    }
}