使调度程序应用程序特定而不是服务器特定

问题描述 投票:0回答:1

我们必须将调度程序Thread绑定到应用程序上下文。

我尝试使用@PostConstruct,但是一旦应用程序启动它就会启动调度程序,但即使应用程序关闭且服务器已启动,它仍会在后台运行。

如果应用程序关闭,那么调度程序也应该停止。

spring quartz-scheduler
1个回答
0
投票

我在Spring中使用Scheduler的方式(即Spring Boot)是在我的项目中有两个类(因此在构建之后包含在我的.jar中)。

1 - SchedulerConfig(配置所必需的)

@Configuration
public class SchedulerConfig implements SchedulingConfigurer {

    private final int POOL_SIZE = 10;

    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
        threadPoolTaskScheduler.setPoolSize(POOL_SIZE);
        threadPoolTaskScheduler.setThreadNamePrefix("my-scheduled-task-pool-");
        threadPoolTaskScheduler.initialize();

        scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
    }   
}

2 - ScheduledTasks(具有由cron表达式定义的频率的实际计划任务)

@Component
public class ScheduledTasks {

    private static final Logger LOG = Logger.getLogger(ScheduledTasks.class);

    @Scheduled(cron = "0 0 * ? * *")
    public void doSomething() { 
        // Do something
    }
}

因此,由于所有内容都包含在正在运行的.jar中,当不再部署应用程序时,计划任务也不会运行。

另见https://www.baeldung.com/spring-scheduled-tasks

© www.soinside.com 2019 - 2024. All rights reserved.