当前位置: 首页 > 知识库问答 >
问题:

线程错误时停止Spring引导

祁晟
2023-03-14
@Bean
public TaskExecutor a() {
  return new SimpleAsyncTaskExecutor();
}

@Bean
public CommandLineRunner b() {
  return (String... args) -> {
    RunnableTask task = SomeRunnableTask();
    a().execute(task);
  };
}

当线程停止时,关闭Spring引导的正确方法是什么?我不应该使用Spring中的SimpleAsynctAskExecutor吗?

谢谢!

共有1个答案

常波
2023-03-14

Spring Boot有一个ShutdownEndpoint,它

允许应用程序正常关闭(默认情况下不启用)。

你得在上面看一看:

Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            Thread.sleep(500L); // For the response to be sent back to the requester
        }
        catch (InterruptedException ex) {
            Thread.currentThread().interrupt();
        }
        ShutdownEndpoint.this.context.close();  // The ConfigurableApplicationContext 
    }
});
thread.setContextClassLoader(getClass().getClassLoader());
thread.start();
 类似资料:
  • 我在spring boot中有一个调度器,它每X分钟完成一个特定的业务任务。它工作正常,直到突然停止,不再啮合。日志或任何其他日志中都没有例外。我需要重新启动程序,调度器才能再次工作。 有时调度程序的任务出错,我抛出一个异常。为了能够具体地处理这些异常,我在Spring中为调度器编写了一个定制的ErrorHandler,用于解析用于日志记录的单独任务。它正确链接到调度程序并处理任务。

  • 我通过创建固定数量的线程来使用执行器服务来进行HTTP GET数据检索。 当Tomcat停止时,我们会出现以下错误: 严重:web应用程序[/viewer]似乎已启动名为[ThreadExecutor_51616156]的线程,但未能停止该线程。这很可能会造成内存泄漏。 这是真的吗?在没有这些服务错误的情况下,如何正确停止tomcat。

  • motioncfp.java:

  • 问题内容: 我读了这句话: 主线程必须是完成执行的最后一个线程。当主线程停止时,程序终止。 是真的吗 我也知道“即使主线程死程序继续运行”。 据我了解:启动程序时,JVM创建一个线程来运行您的程序。JVM创建一个用于运行程序的用户线程。该线程称为主线程。该类的main方法是从主线程调用的。如果程序从主线程中产生新线程,它将停止直到最后一个线程死亡。 哪一个是对的? 问题答案: 当所有非守护程序线程

  • 问题内容: 我正在编写一段连接到服务器的代码,使用该连接会生成一堆线程并执行一堆“工作”。 在某些情况下,连接失败,我需要停止所有操作并从头开始创建新对象。 我想在对象之后进行清理,但在线程上调用thread.stop,但是此方法似乎已被弃用。 推荐的替代方法是什么?是否应该为每个线程编写自己的清理和退出方法?将线程设置为null?或者是其他东西? 问题答案: 看这里 : 在HowToStopAT