我来自(主要是)Python Django / Celery背景,并从Spring Boot开始。
我很难理解您如何分隔角色。
例如,当有Django / Celery项目时,我一方面将Web后端启动为gunicorn
,另一方面将工作人员以后端启动celery
(因此,不同的命令,但指向相同的代码)。
但是在Spring Boot上,您只有一个入口点,一旦注入了调度程序,就将开始处理作业。
将Django / Celery应用程序中的内容分开的正确方法是什么?我是否应该将几乎所有代码都放在一个库中,然后创建2个最终应用程序,一个将安装@DispatcherServlet
,另一个将安装@EnableScheduling
,还是在运行时注入某种配置?
我认为,如果“ Web”和“调度程序”都是应用程序中的重要功能,那么只要您创建一个整体的应用程序,我们就不需要将它们分开。
因为您使用的是Spring Boot,所以将自动注入并配置@DispatcherServlet和Web应用程序所需的所有其他Web组件。您唯一要做的就是创建一个用@Controller或@RestController注释的类,并在这些类中设置@RequestMapping方法。
调度程序怎么样?您需要先在@Configuration类之一中添加@EnableScheduling,然后在调度程序包中创建Scheduler类,如下面的代码示例所示。
您可以使用cron属性来设置指定执行时间,就像Linux crontab一样。仅在cron时间到时才开始处理作业。
@Component
public class PlatformScheduler {
@Autowired
private BatchService batchService;
@Scheduled(cron = "0 0 12 * * *")
public void dailyInitialize() {
clearCompletedBatches();
queryBatchesToRunToday();
}
@Scheduled(fixedRate = 10000, initialDelay = 10000)
private void harvestCompletedBatches() {
batchService.harvestCompletedBatches();
}
@Scheduled(fixedRate = 10000, initialDelay = 10000)
private void executeWaitingBatches() {
batchService.executeWaitingBatches(new DateTime());
}
}
最简单的项目层次结构如下所示,“ Web”和“调度程序”可以安全地位于同一项目中,并共享相同的@Service组件而不会造成损害。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句