Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

273
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda