Начать фиксированное расписание с задержкой, когда метод запускается и останавливается, когда заканчивается
У меня есть веб-приложение Spring Boot.
Я хочу запустить запланированное задание fixedDelayed при запуске метода. И остановить запланированную работу, когда someMethod
Метод закончен. Я прочитал документацию, но я не мог понять, как. Я хочу записывать что-то в БД каждые 30 секунд, пока someMethod
все еще работает.
Вот псевдокод. У кого-нибудь есть идея?
public void someMethod() {
//Start scheduledLogger() to work every 30 seconds
//...
//Do something taking long time
//Stop scheduledLogger() job
}
private void scheduledLogger() {
//Log to database
}
1 ответ
Решение
Вы можете сделать что-то вроде этого:
public void someMethod()
{
//Start scheduledLogger() to work every 30 seconds
TimerTask tasknew = new TimerTask(){
@Override
public void run()
{
scheduledLogger();
}
};
Timer timer = new Timer();
// scheduling the task
timer.scheduleAtFixedRate(tasknew, new Date(), 3000);
//Do something taking long time
try
{
Thread.sleep(20000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
//Stop scheduledLogger() job
// terminating the timer
timer.cancel();
}
private void scheduledLogger() {
//Log to database
System.out.println("Log to database at "+new Date());
}