gpt4 book ai didi

java - Autowired 服务的 ScheduledExecutorService 问题

转载 作者:太空宇宙 更新时间:2023-11-04 09:19:07 24 4
gpt4 key购买 nike

我正在尝试创建一个 ScheduledExecutor 服务来每天在特定时间运行 MyTask 。我遇到的问题是该任务使用 @Service 组件,如果我在没有 @Component 的情况下执行 @Autowire ,则服务将无法工作,如果我放置 @Component ,则 MyTask 首先运行,无论 Scheduler 所在的组件如何。

我尝试通过构造函数和@DependsOn发送服务,但它不起作用。

@Component
public class MyRunnable implements Runnable {

@Autowired
private Service service;

@Override
public void run() {

//some code

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

scheduler.scheduleAtFixedRate(new MyTask(),
initalDelay,
TimeUnit.DAYS.toSeconds(1),
TimeUnit.SECONDS);


}}

如果将@Component放在这里,则首先运行

 public class MyTask extends TimerTask {

@Autowired
private Service service;
}

最佳答案

将任务定义为

公共(public)类 MyTask 扩展了 TimerTask {

private final DataSetService dataSetService

public MyTask(DataSetService dataSetService) {
this.dataSetService = dataSetService;
}

// Your other code here

}

你的MyRunnable为

@Component 
public class MyScheduler {

@Autowired
private final DataSetService dataSetService

private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);

@PostConstruct
public void startScheduler() {
scheduler.scheduleAtFixedRate(new MyTask(dataSetService),
initalDelay,
TimeUnit.DAYS.toSeconds(1),
TimeUnit.SECONDS);
}

如您所见,MyRunnable(现已更名为 MyScheduler)不再实现不必要的 Runnable,它是一个 spring bean,在实例化后,PostConstruct 启动调度程序。

关于java - Autowired 服务的 ScheduledExecutorService 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58574253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com