Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

278
Vistas
Cómo lanzar correctamente una excepción de tiempo de ejecución y reiniciar el contenedor docker

Tengo un contenedor Docker con una aplicación Java que usa una base de datos para conservar algunos datos. Mi aplicación tiene una clase que extiende otra que no es código mío (concretamente SinkTask, una clase de Kafka que sirve para transferir datos de Kafka a otro sistema). Cuando la aplicación se inicia, abre una conexión a la base de datos. A veces, la base de datos cierra la conexión y las tareas comienzan a fallar. Las excepciones lanzadas por estas fallas están atrapadas en una parte de mi código y puedo pensar en diferentes formas de manejarlas: 1. Simplemente ejecutando el código desde dentro de la aplicación que detiene e inicia la conexión nuevamente 2. Reiniciando el contenedor Docker, creando una nueva conexión en el proceso

Creo que la mejor solución es la número 1. Sin embargo, quería saber cómo podría desencadenar la segunda situación. Supongo que debería lanzar una nueva excepción en el bloque catch capaz de finalizar la aplicación (recuerde que la parte SinkTask del código está fuera de mi control). ¿Sería esta una buena solución? ¿Qué tipo de excepción debo lanzar en este caso?

Esta es la parte del código donde capturo la excepción.

 private void commitCollections() { for (SinkCollection sc : collections.values()) { try { commitCollection(sc); } catch (Exception e) { LOG.error("Error flushing collection " + sc.getTableName(), e); } } transactionRecordCount = 0; try { connection.commit(); } catch (SQLException e) { LOG.error("Commit error", e); } }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Lanzar una Exception y dejar que se propague para finalizar la aplicación es una solución perfectamente agradable. En mi opinión, usar System.exit(exit_code) sería mejor porque describe claramente lo que está haciendo ese código.

Además, docker mostrará exit_code en el estado del contenedor ( docker ps -a ), lo que ayudará a diferenciar entre diferentes condiciones de error. Cuando se lanza una excepción no detectada, el código de salida siempre es 1.

Espero que ayude.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda