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

如何超时Spring Boot@Scheduled Thread

公良运锋
2023-03-14

我有一个Spring Boot应用程序,它在一天中的特定时间运行许多作业(由CRON配置)。现在,我发现应用程序正在运行,但计划的作业没有得到执行。有没有办法在Spring中为带有@Scheduled的任务添加超时。

这样即使作业被阻塞或等待,也可以杀死它,这样其他线程就可以顺利执行了。线程可以等待指定的时间,然后如果任务还没有完成,就杀死线程。

我知道我可以通过以下方式增加池容量:

executors.newschduledThreadpool();

但是如果最终所有线程都被阻塞了会发生什么

我在论坛上看了看,看到了提到使用未来任务的解决方案。这可以应用于带有@计划注释的任务吗?因为这个应用程序是Spring启动的,所以也没有配置超时的xml配置。

共有1个答案

屠昌胤
2023-03-14

您可以使用TaskScheduler启动和控制任务。在@配置类中:

@Configuration
public class YourConfig {

  @Bean
  public TaskScheduler scheduler() {
    return new ThreadPoolTaskScheduler();
  }
  // ...

之后,您可以通过以下方式安排任务:

@Service
public class YourTaskRunnable implements Runnable {

  @Autowired
  private TaskScheduler scheduler;

  @PostConstruct
  private void init() {
    ScheduledFuture future = this.scheduler.schedule(this, /* to execute immediately, for example */ Calendar.getInstance().getTime());
    // ...
  }


  @Override
  public void run() {
  // Your task code ...
  }
}
 类似资料:
  • 我在一个Spring boot项目中工作,有一个请求返回网关超时504。我可以增加这个超时吗?这是一个属性,我可以改变在独立的完整。xml?我使用的是wildfly服务器。 请求在1分钟内触发两次,每次触发时间为1分钟。

  • 我正在开发一个Spring boot应用程序,当响应时间超过30秒时,我必须抛出一个错误。 因为我正在使用应用程序。yml,我试过了 因为它不工作,尝试使用application.properties-. it不工作。 试图找出如何在这两种情况下抛出系统错误。即当系统空闲后发生超时且响应时间超过30秒时

  • 比如我请求了别人,超时时间是5秒,超时后需要打印日志。 微服务是通过openfeign请求的,希望可以打印日志,代码不是手动请求的,不然加上打印代码就好了。

  • 本文向大家介绍SpringBoot设置接口超时时间的方法,包括了SpringBoot设置接口超时时间的方法的使用技巧和注意事项,需要的朋友参考一下 SpringBoot设置接口访问超时时间有两种方式 一、在配置文件application.properties中加了spring.mvc.async.request-timeout=20000,意思是设置超时时间为20000ms即20s, 二、还有一种

  • 我正在使用thuncydides jbehave插件来运行Selenium测试。但是,由于 jbehave 超时,我总共无法运行超过 5 分钟的测试。我不知道如何配置thuncydides/jbehave来覆盖这个限制。硒测试过去比5分钟更长,所以这对许多人来说应该是一个实际问题。

  • 问题内容: 我已经按照kuester2000的回答进行了操作,但是我的超时设置似乎不起作用。 但是,超时值不变。 在我链接的答案中,它还说: 连接超时抛出“ java.net.SocketTimeoutException:套接字未连接”,套接字超时抛出“ java.net.SocketTimeoutException:操作超时”。 但是我都没有。相反,我收到“ org.apache.http.co

  • 我是SpringBoot的新手,正在寻找一种在endpoint超过3秒才能返回响应时超时的方法。我尝试添加属性“server.servlet.session.timeout”,但仍然没有运气。如何做到这一点?谢谢。 Application.properties

  • 问题内容: 想在一个固定的时间内运行一个线程。如果未在该时间内完成,我想杀死它,抛出一些异常或以某种方式处理它。怎么做到呢? 我从该线程 了解到的一种方法是在该线程的run()方法内使用TimerTask。 有没有更好的解决方案呢? 编辑:添加赏金,因为我需要一个更明确的答案。下面给出的ExecutorService代码无法解决我的问题。为什么在执行完某些代码后就进入sleep()-我无法处理这段