Czy Spring Boot ma coś, co pozwala uruchomić zadanie kilka minut później po rozmowie?

Aktualizacja: Okazało się, że Spring Boot ma ThreadPoolTaskScheduler. Pozwala to na jednorazową realizację zadania z opóźnieniem czasowym. Zobacz odpowiedź poniżej

1
Lenar 3 grudzień 2018, 20:06

1 odpowiedź

Najlepsza odpowiedź

Najpierw musimy zdefiniować fasolę

@Bean
public ThreadPoolTaskScheduler getScheduler(){
    ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
    scheduler.setPoolSize(10);
    return scheduler;
}

Zadanie, które należy wykonać

public class WakeUpCallTask implements Runnable {

    private String parameter1;

    private String parameter2;

    public WakeUpCallTask(String parameter1, String parameter2) {
        super();
        this.parameter1= parameter1;
        this.parameter2= parameter2;
    }

    @Override
    public void run() {
        // Code that should be executed
    }

}

Przykład punktu końcowego - planowanie zadania w 10000ms

@Autowired
ThreadPoolTaskScheduler scheduler;

@PostMapping(value = "/wake-me-up", consumes = "application/json")
@ResponseStatus(HttpStatus.OK)
public void scheduleCall(@RequestBody WakeMeUpRequest request) {
    scheduler.schedule(
            new WakeUpCallTask(request.getParameter1(), request.getParameter2()),
            new Date(System.currentTimeMillis() + 10000));
}
0
Lenar 4 grudzień 2018, 21:25