Остановите планирование от конечной точки отдыха
Я делаю проект 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;
}