我有一个用例,我们必须使用集群中一个节点上的更改静默替换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);
}
答案 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.
}
}