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

使用注释将Spring任务调度器应用于同一Bean的多个实例

韦棋
2023-03-14

我有一个带有@Scheduled方法的类任务,如下所示

public class Task{
 public void task(){}
}

TaskConfig创建2个相同类的不同bean:

public class TaskConfig{
 @Bean("task1")
 public Task getTask1(){return new Task();}

 @Bean("task2")
 public Task getTask1(){return new Task();}
}

使用基于xml的配置,我可以为下面的方法创建2个调度器,它们将在不同的时间运行。:

<task:scheduled-tasks >       
        <task:scheduled ref="task1"    method="task"           cron="*/5 * * * * ?" />
        <task:scheduled ref="task2"    method="task"           cron="*/30 * * * * ?" />
</task:scheduled-tasks>

但是如何在Spring5中实现同样的场景呢?请建议。提前谢谢!

共有1个答案

季小云
2023-03-14

您可以使用@Scheduled注释并注释要执行的方法:https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html#scheduling-注释支持您还可以定义类似cron的表达式。

您还应该确保启用了调度:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/annotation/EnableScheduling.html

编辑:

public class TaskConfig{
 @Bean("task1")
 public Task getTask1(){return new Task() {
   @Override
   @Scheduled
   public void task(){super.task();}
 };
}

 @Bean("task2")
 public Task getTask1(){return new Task() {
   @Override
   @Scheduled
   public void task(){super.task();}
 };
}
 类似资料:
  • 我对任务比较陌生,想在我的应用程序上实现它们。我想要的是,当页面加载时,在我的客户端对一个调用我需要的所有编目并将所有对象的JSON返回给我的客户端的函数执行一个ajax请求。服务器端的这个函数是我创建的具有多个任务的函数。因此,我对此有以下问题: > 加载该页面所需的所有目录并返回一个JSON对象是一个好的做法吗? 如果任务调用一个类的同一个实例,它实际上是作为多线程工作的吗?还是在每个任务中创

  • 我使用spring调度器任务在固定间隔后调用类中的方法,如下所示 一旦调度程序触发init方法。init方法将使用线程池执行器来执行队列中的所有作业。 问题:执行init方法的初始线程是否会等待init方法中的所有处理(由executor service通过生成新线程来完成)完成? 调度器任务的池大小属性仅用于触发任务,而不是用于执行或处理被触发任务内部的逻辑。

  • 我试着用一个实例并行运行许多计划任务,每一个我这样配置任务 但是有很多实例每秒开始,而第一个实例尚未完成。是否可以同时配置任务运行的一个实例?我的豆子配置在Spring调度器.xml

  • 我正在开发一个微服务,使用Spring Boot,公开RESTendpoint。由于可伸缩性,我必须在一个不同的端口上运行该服务的多个实例。应用程序的配置是什么,以便它可以注册到eureka并且请求是负载平衡的?我正在使用Spring cloud config、Eureka服务器和Zuul。

  • 问题内容: 我将在春季使用任务名称空间设置一个计划任务计划。 我想根据cron表达式大多数的任务安排到火,有的在启动后只启动一次,一个固定的延迟,然后再也没有(即什么设置,以将实现在SimpleTriggerBean)。 是否有可能在任务名称空间中实现此目标,还是我需要恢复为触发器定义bean? 问题答案: 如果你看看任务命名空间XSD,你会发现只有三个不同的配置类型:,和。 并且,如果您查看Sc

  • 我知道从中调用带注释的方法,前面已经讨论过了。 但是我不明白为什么当bean被覆盖时它就不起作用了。 我有一个遗留类,我不能修改。它是一个配置,同时也是一个业务bean。这是一个简化版本: 现在,调用返回而不是。 当配置被删除并且测试上下文的配置被设置为时,一切都能正常工作(结果为)。 在测试中注册bean有什么不同?