Mongodb Spring引导-将计划作业作为单独的进程运行
我有一个SpringBoot应用程序,它也很少有计划的作业。我看不到任何与实现有关的功能问题。其中一个作业几乎每秒运行一次,以进行实时更新。还有其他工作 我怀疑存在性能问题,尤其是当长时间运行的API击中控制器时Mongodb Spring引导-将计划作业作为单独的进程运行,mongodb,spring-boot,spring-scheduled,Mongodb,Spring Boot,Spring Scheduled,我有一个SpringBoot应用程序,它也很少有计划的作业。我看不到任何与实现有关的功能问题。其中一个作业几乎每秒运行一次,以进行实时更新。还有其他工作 我怀疑存在性能问题,尤其是当长时间运行的API击中控制器时 // Heavy Job @Scheduled(fixedRate = 10000) public void processAlerts(){ } @Scheduled(fixedDelayString = "${process.events.interval}") public
// Heavy Job
@Scheduled(fixedRate = 10000)
public void processAlerts(){
}
@Scheduled(fixedDelayString = "${process.events.interval}")
public void triggerTaskReadiness() throws IOException {
log.info("Trigger event processing job");
}
// Heavy Job to process data from different tables.
@Scheduled(fixedDelayString = "${app.status.interval}")
public void triggerUpdateAppHealth() throws IOException {
log.info("Trigger application health");
}
是否可以将作业作为单独的流程。在繁重的工作中使用spring boot应用程序的最佳实践是什么。我认为,这个问题太笼统了。这完全取决于您的资源和工作的具体用途 SpringBoot提供了一种通用的调度机制,但没有对作业的性质做出任何假设 总而言之,当您运行一个繁重的作业时,CPU、网络、I/O和任何消耗的资源(同样,取决于作业的实际代码)都是真实的 如果您在外部运行它,基本上另一个进程将消耗相同的资源,假设它在同一台服务器上运行 从spring boot的角度来看,我可以说:
@Scheduled
的实施。默认情况下,将有一个线程为所有@计划的
作业提供服务,这可能是不够的taskScheduler
来更改此行为:
@Bean(destroyMethod = "shutdown")
public Executor taskScheduler() {
return Executors.newScheduledThreadPool(10); // allocate 10 threads to run @Scheduled jobs
}
你可能对阅读感兴趣
@Scheduled
始终在一个Spring管理的应用程序上下文的“边界”内工作。因此,如果您决定扩展实例,那么每个实例都将运行“计划”代码并执行繁重的作业。
使用Quartz是可能的,spring可以将它配置为集群模式,您可以将它配置为每次选择一个节点并执行作业,但由于您计划每秒钟运行一次,我怀疑Quartz是否足够好你好@马克,非常感谢你的详细电子邮件。对我还在为工作频率和要求争论不休。我将使用更多线程池计数和检查来实现任务调度器。每一条评论都对我们的实施非常有用。