使用注解将 Spring task-scheduler 应用于同一 Bean 的多个实例
Apply Spring task-scheduler to multiple instances of same Bean using Annotation
我有一个 class 使用 @Scheduled 方法的任务,如下
public class Task{
public void task(){}
}
TaskConfig 创建 2 个相同的不同 bean class :
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>
但是如何在 Spring 5 Annotation based 中实现同样的场景?请提前suggest.Thanks!
您可以使用 @Scheduled
注释并注释您要执行的方法:https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html#scheduling-annotation-support 您还可以定义类似 cron 的表达式。
编辑:
public class TaskConfig{
@Bean("task1")
public Task getTask1(){return new Task() {
@Override
@Scheduled
public void task(){super.task();}
};
}
@Bean("task2")
public Task getTask2(){return new Task() {
@Override
@Scheduled
public void task(){super.task();}
};
}
我有一个 class 使用 @Scheduled 方法的任务,如下
public class Task{
public void task(){}
}
TaskConfig 创建 2 个相同的不同 bean class :
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>
但是如何在 Spring 5 Annotation based 中实现同样的场景?请提前suggest.Thanks!
您可以使用 @Scheduled
注释并注释您要执行的方法:https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html#scheduling-annotation-support 您还可以定义类似 cron 的表达式。
编辑:
public class TaskConfig{
@Bean("task1")
public Task getTask1(){return new Task() {
@Override
@Scheduled
public void task(){super.task();}
};
}
@Bean("task2")
public Task getTask2(){return new Task() {
@Override
@Scheduled
public void task(){super.task();}
};
}