2017-02-28 3 views
0

사용하여 DB 연결을 새로 고치 않습니다. 다른 노드는 프로세스를 다시 시작하면 안되지만 db 파일 (SQLite)이 대체 될 때 새로운 변경 사항을 가져 오도록 DB 연결을 새로 고쳐야합니다. JOOQ에서이 작업을 수행 할 수있는 방법이 있습니까? DB 연결을 새로 고치는 관련 API를 찾지 못했습니다. 어떻게 우리가 자동으로 다른 노드로 클러스터의 한 노드에서의 변경과 DB를 교체해야 사용 사례가 JOOQ

나는 다음을 수행하려고하지만 난 교착 얻을 -, 당신이해야

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

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

    record.attach(config); 
} 

답변

1

jOOQ 당신을 위해 당신의 연결을 관리하지 않습니다 - 호출 방법에

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(); 
} 

을 직접 또는 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. 
    } 
}