ScheduledTaskRegistrar使用callable 代码
时间: 2024-01-15 10:02:46 浏览: 66
好的,以下是一个简单的ScheduledTaskRegistrar使用callable的代码示例:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.stereotype.Component;
import java.util.concurrent.Callable;
@Configuration
@EnableScheduling
public class MyScheduledTask {
@Autowired
private ScheduledTaskRegistrar registrar;
@Bean
public MyCallable myCallable() {
return new MyCallable();
}
@Scheduled(cron = "0/5 * * * * *")
public void scheduleTask() {
Callable<Object> callable = myCallable();
registrar.addFixedRateTask(new MyCallableTask(callable), 1000);
}
private static class MyCallableTask implements Runnable {
private Callable<Object> callable;
public MyCallableTask(Callable<Object> callable) {
this.callable = callable;
}
@Override
public void run() {
try {
callable.call();
} catch (Exception e) {
e.printStackTrace();
}
}
}
private static class MyCallable implements Callable<Object> {
@Override
public Object call() throws Exception {
// 这里可以写需要执行的任务逻辑
System.out.println("执行任务");
return null;
}
}
}
```
这个示例中,我们通过使用ScheduledTaskRegistrar来注册一个定时任务,并在其中执行一个callable对象。具体实现是,在MyScheduledTask类中,定义了一个scheduleTask方法,用于定时执行任务;然后在其中创建了一个MyCallable对象,并将其作为一个callable对象传递给MyCallableTask类的构造函数;最后,我们将MyCallableTask对象作为任务的执行体,并通过调用ScheduledTaskRegistrar的addFixedRateTask方法来注册定时任务。在MyCallableTask的run方法中,我们通过调用callable的call方法来执行任务逻辑。
阅读全文