gpt4 book ai didi

java - 使用现有 Controller 在 Spring Boot 中计划任务

转载 作者:行者123 更新时间:2023-12-02 12:44:55 26 4
gpt4 key购买 nike

我想在 Spring Boot 中创建计划任务。我已经有了它的定义,如下所示:

@Component
public class ScheduledTasks {

private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);
private static long count = 0;

@Autowired
private TaskRepository taskRepository;

@Scheduled(fixedRate = 15000)
public void createTasks() {

count++;

Task t = new Task();
t.setTitle("Scheduled Task " + count);
//TaskController tc = new TaskController();
//tc.create(t);
taskRepository.saveAndFlush(t);

log.info("A new scheduled task has been created!");
}
}

这一切正常,但我直接使用我的存储库的界面。我不想直接使用存储库,而是想使用现有的 Controller 类。我有一个 Controller 类,如下所示:

@RestController
@RequestMapping("api/v1/")
public class TaskController {

@Autowired
private TaskRepository taskRepository;

@RequestMapping(value = "tasks", method = RequestMethod.POST)
public Task create(@RequestBody Task task) {
return taskRepository.saveAndFlush(task);
}
}

那么,我如何在 ScheduledTasks 类中实际调用这个 create 方法来创建任务呢?如果我尝试执行类似 new TaskController() 的操作(正如我已注释掉的那样),则会收到空引用错误。知道如何解决这个问题吗?

最佳答案

如果您执行new TaskController(),您创建的实例将不会由 Spring 管理,因此,IoC( Autowiring 依赖项)将不会发生。

我相信您只是想使用 Controller 的 Spring 托管实例,在这种情况下,只需在 ScheduledTask 组件中 Autowiring 它即可。 (如下所示(未经测试))

@Component
public class ScheduledTasks {

private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);
private static long count = 0;

@Autowired
private TaskRepository taskRepository;

@Autowired
private TaskController tc;

@Scheduled(fixedRate = 15000)
public void createTasks() {

count++;

Task t = new Task();
t.setTitle("Scheduled Task " + count);
tc.create(t);
taskRepository.saveAndFlush(t);

log.info("A new scheduled task has been created!");
}
}

关于java - 使用现有 Controller 在 Spring Boot 中计划任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44807111/

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