У меня есть приложение для Spring Java Spring, в котором есть планировщик, который вызывает асинхронную задачу из службы. Задача занимает несколько минут (обычно 3-5 минут), чтобы завершить. < /p>
code: < /p>
планировщик < /strong> < /p>
@Component
public class ScheduledTasks {
@Autowired
private MyService myService;
@Scheduled(cron = "0 0 */1 * * ?")
public void scheduleAsyncTask() {
myService.doAsync();
}
}
< /code>
service < /strong> < /p>
@Service
public class MyService {
@Async("threadTaskExecutor")
public void doAsync() {
//Do Stuff
}
}
< /code>
контроллер < /strong> < /p>
@CrossOrigin
@RestController
@RequestMapping("/mysrv")
public class MyController {
@Autowired
private MyService myService;
@CrossOrigin
@RequestMapping(value = "/", method = RequestMethod.POST)
public void postAsyncUpdate() {
myService.doAsync();
}
}
< /code>
Планировщик запускает задачу Async каждый час, но пользователь также может запускать ее вручную из пользовательского интерфейса. продолжается, когда метод работает, а затем он отключается после завершения метода. < /p>
Что -то подобное в моем классе службы: < /p>
@Autowired
private MyDbRepo myDbRepo;
@Async("threadTaskExecutor")
public void doAsync() {
if (!myDbRepo.isRunning()) {
myDbRepo.setIsRunning(true);
//Do Stuff
myDbRepo.setIsRunning(false);
} else {
LOG.info("The Async task is already running");
}
}
< /code>
Теперь проблема заключается в том, что флаг иногда застрял по разным причинам (перезагрузка приложения, некоторая другая ошибка приложения и т. Д.) < /p>
Как я могу это сделать? Есть ли способ запустить метод сразу после запуска приложения Spring Boot, откуда я могу вызвать метод из моего репо, чтобы установить флаги в базе данных?
Подробнее здесь: https://stackoverflow.com/questions/558 ... app-starts
Вызовите метод после запуска приложения Spring Boot ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение