es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Una transacción en curso con Feign Retryer mantiene la conexión.

Estoy utilizando Feign Retryer con una transacción de larga duración. Está manteniendo una conexión JDBC que quiero liberar.

Intenté cerrar la conexión, pero también confirma una transacción y Retryer ya no se invoca.

¿Hay alguna forma de liberar la conexión durante el tiempo de Thread.sleep()?

“`java
public void continueOrPropagate(RetryableException exception) {
hacerAlgo();
if (intentos()) {
throw exception;
}
Thread.sleep(500000);
}
““

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes liberar la conexión JDBC durante la duración de Thread.sleep() configurando el modo de autocommit en false antes de llamar a Thread.sleep(). Esto evitará que la conexión se confirme cuando se cierre. Aquí tienes un ejemplo de cómo puedes modificar el código:

    public void continueOrPropagate(RetryableException exception) {
        doSomething();
        if (attempts()) {
            throw exception;
        }
        Connection conn = null;
        try {
            conn = dataSource.getConnection();
            // establecer el modo de autocommit en false
            conn.setAutoCommit(false);
        } catch (SQLException ex) {
            throw new RuntimeException(ex);
        } finally {
            // liberar la conexión después de Thread.sleep()
            try {
                Thread.sleep(500000);
                if (conn != null) {
                    conn.close();
                }
            } catch (InterruptedException | SQLException ex) {
                throw new RuntimeException(ex);
            }
        }
    }
    

    En este ejemplo, primero obtenemos una conexión JDBC del objeto dataSource y establecemos su modo de autocommit en false. Luego liberamos la conexión después de llamar a Thread.sleep() llamando a su método close(). Ten en cuenta que capturamos cualquier excepción que pueda ocurrir al liberar la conexión o dormir el hilo y lanzamos una RuntimeException si ocurren.

    Puedes modificar este código para adaptarlo a tus necesidades específicas, pero la idea básica es establecer el modo de autocommit en false y liberar la conexión después de dormir el hilo. Esto permitirá que el Retryer de Feign continúe su trabajo sin mantener una conexión JDBC.

Comments are closed.