Остановите планирование от конечной точки отдыха

Я делаю проект Spring Boot

Это основной класс

@SpringBootApplication
@ComponentScan(basePackages="blabla.quartz")
@EnableScheduling
public class App 
{
    public static void main( String[] args )
    {
        ConfigurableApplicationContext context =SpringApplication.run(App.class, args);     
    }

}

Это контроллер

@RestController
public class Controller {

    @Autowired
    private SampleTask m_sampletask;

    @Autowired TaskScheduler taskScheduler;

    ScheduledFuture scheduledFuture;
    int jobid=0;

    @RequestMapping(value = "start/{job}", method = RequestMethod.GET)
    public void start(@PathVariable String job) throws Exception {
        m_sampletask.addJob(job);

        Trigger trigger = new Trigger(){

            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                org.quartz.CronExpression cronExp=null;
                CronSequenceGenerator generator = new CronSequenceGenerator("0 * * ? * *");
                Date nextExecutionDate = generator.next(new Date());
                System.out.println(nextExecutionDate);              
                return nextExecutionDate;

            }

        };                          
        scheduledFuture = taskScheduler.schedule(m_sampletask, trigger);

    }

}

Это реализация ScheduleConfigurer

@Service
public class MyTask implements SchedulingConfigurer{    

    @Bean
    public TaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setThreadNamePrefix("somegroup-");
        scheduler.setPoolSize(10);      
        scheduler.setWaitForTasksToCompleteOnShutdown(true);
        scheduler.setAwaitTerminationSeconds(20);
        return scheduler;
    }

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
    }   

}

Это класс, который я вызываю из контроллера как запланированное задание

@Component
public class SampleTask implements Runnable{

    private List<String> jobs=new ArrayList<String>();
    private String jobName;

    public void addJob(String job){
        jobName=job;
    } 

    @Override
    public void run() {     
        System.out.println("Currently running "+jobName);       
    }
}

Как остановить запланированное задание с помощью конечной точки отдыха (Предположим, что "/stop/{jobname}").. Когда я запустил задание с использованием "/start/{jobname}" конечной точки отдыха?

1 ответ

Вам, вероятно, понадобится использовать кварцевый планировщик (если еще нет) и добавить службу с требуемыми методами, а затем внедрить эту службу в свой контроллер.

Вот хороший пример: https://github.com/javabypatel/spring-boot-quartz-demo

Если вам нужно хранилище заданий в памяти (это не база данных), загляните в RAMJobStore: http://www.quartz-scheduler.org/documentation/quartz-2.x/configuration/ConfigRAMJobStore.html

Пример остановки

Это выдержка из демо-проекта. Кредит идет на Джаеш Патель: https://github.com/javabypatel

/**
 * Stop a job
 */
@Override
public boolean stopJob(String jobName) {
    System.out.println("JobServiceImpl.stopJob()");
    try{    
        String jobKey = jobName;
        String groupKey = "SampleGroup";

        Scheduler scheduler = schedulerFactoryBean.getScheduler();
        JobKey jkey = new JobKey(jobKey, groupKey);

        return scheduler.interrupt(jkey);

    } catch (SchedulerException e) {
        System.out.println("SchedulerException while stopping job. error message :"+e.getMessage());
        e.printStackTrace();
    }
    return false;
}
Другие вопросы по тегам