Java 如何正确引发运行时异常并重新启动docker容器

Java 如何正确引发运行时异常并重新启动docker容器,java,docker,exception,Java,Docker,Exception,我有一个带有Java应用程序的Docker容器,该应用程序使用DB保存一些数据。我的应用程序有一个类扩展了另一个不是我的代码的类(特别是SinkTask,一个来自Kafka的类,用于将数据从Kafka传输到另一个系统)。当应用程序启动时,它会打开与数据库的连接。有时,数据库关闭连接,任务开始失败。这些失败引发的异常被捕获在我的代码的一部分中,我可以想出不同的方法来处理它们: 1.只需在应用程序中执行代码,即可停止并再次启动连接 2.重新启动Docker容器,在此过程中创建新连接 我认为最好的解决

我有一个带有Java应用程序的Docker容器,该应用程序使用DB保存一些数据。我的应用程序有一个类扩展了另一个不是我的代码的类(特别是SinkTask,一个来自Kafka的类,用于将数据从Kafka传输到另一个系统)。当应用程序启动时,它会打开与数据库的连接。有时,数据库关闭连接,任务开始失败。这些失败引发的异常被捕获在我的代码的一部分中,我可以想出不同的方法来处理它们: 1.只需在应用程序中执行代码,即可停止并再次启动连接 2.重新启动Docker容器,在此过程中创建新连接

我认为最好的解决办法是第一。然而,我想知道如何触发第二种情况。我的猜测是,我应该在catch块中抛出一个新的异常,该异常能够终止应用程序(请记住,代码的SinkTask部分超出了我的控制)。这是一个好的解决方案吗?在这种情况下,我应该抛出哪种异常

这是我捕获异常的代码部分

private void committecollections(){
对于(SinkCollection sc:collections.values()){
试一试{
佣金征收(sc);
}捕获(例外e){
LOG.error(“错误刷新集合”+sc.getTableName(),e);
}
}
transactionRecordCount=0;
试一试{
commit();
}捕获(SQLE异常){
LOG.error(“提交错误”,e);
}
}

抛出一个
异常并让它传播以终止应用程序是一个非常好的解决方案。依我看,使用
System.exit(exit\u code)
会更好,因为它清楚地描述了代码在做什么

此外,docker将在容器状态中显示退出代码(
docker ps-a
),从而帮助区分不同的错误情况。当抛出未捕获异常时,退出代码始终为1

希望有帮助