java scheduled_java-如何使用具体调度程序启动@Scheduled方法?

我有调度程序:

@Bean("one")

ThreadPoolTaskScheduler taskScheduler(){

ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();

threadPoolTaskScheduler.setPoolSize(5);

threadPoolTaskScheduler.setAwaitTerminationSeconds(60);

threadPoolTaskScheduler.setThreadNamePrefix("Test-");

return threadPoolTaskScheduler;

}

@Bean("two")

ThreadPoolTaskScheduler taskScheduler2(){

ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();

threadPoolTaskScheduler.setPoolSize(50);

threadPoolTaskScheduler.setAwaitTerminationSeconds(60);

threadPoolTaskScheduler.setThreadNamePrefix("Test2-");

return threadPoolTaskScheduler;

}

和方法:

@Scheduled(fixedRate = 1000L)

public void test() {

第二种方法:

@Scheduled(fixedRate = 1000L)

public void test2() {

如何使用具体的计划程序配置每个@Scheduled方法?

如果我这样实现:

@Slf4j

@Component

public class MyScheduler {

private final ThreadPoolTaskScheduler taskSchedulerFirst;

private final ThreadPoolTaskScheduler taskSchedulerSecond;

private final TestBean testBean;

public MyScheduler(@Qualifier("first") ThreadPoolTaskScheduler taskSchedulerFirst, @Qualifier("second")ThreadPoolTaskScheduler taskSchedulerSecond, TestBean testBean) {

this.taskSchedulerFirst = taskSchedulerFirst;

this.taskSchedulerSecond = taskSchedulerSecond;

this.testBean = testBean;

}

@PostConstruct

public void test() {

taskSchedulerFirst.scheduleAtFixedRate(testBean::test, 1000L);

taskSchedulerSecond.scheduleAtFixedRate(testBean::test2, 1000L);

}

Bouth调度程序未使用,已使用TaskExecutor:

2018-09-05 11:10:30.812 INFO 10724 --- [TaskExecutor-41] com.example.scheduling.TestBean : hz

2018-09-05 11:10:31.747 INFO 10724 --- [TaskExecutor-43] com.example.scheduling.TestBean : hz

2018-09-05 11:10:31.748 INFO 10724 --- [TaskExecutor-46] com.example.scheduling.TestBean : hz2

2018-09-05 11:10:32.747 INFO 10724 --- [TaskExecutor-45] com.example.scheduling.TestBean : hz

2018-09-05 11:10:32.748 INFO 10724 --- [TaskExecutor-48] com.example.scheduling.TestBean : hz2

2018-09-05 11:10:33.747 INFO 10724 --- [TaskExecutor-47]

但是使用TaskExecutor为什么呢?

解决方法:

TL; DR否

根据Spring scheduling,它们是TaskScheduler抽象的不同实现

> ThreadPoolTask​​Scheduler作为实现:

ThreadPoolTaskScheduler, can be used whenever external thread management is not a requirement. Internally, it delegates to a ScheduledExecutorService instance. ThreadPoolTaskScheduler actually implements Spring’s TaskExecutor interface as well, so that a single instance can be used for asynchronous execution as soon as possible as well as scheduled, and potentially recurring, executions.

> @Scheduled作为任务计划的注释支持

The @Scheduled annotation can be added to a method along with trigger metadata.

The simplest way to schedule tasks in Spring is to create method annotated by @Scheduled in spring managed bean.

标签:scheduler,spring,java

来源: https://codeday.me/bug/20191108/2009012.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值