Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

272
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!