수밋 :
나는 작업을 완료하는 데 몇 분 정도 (보통 3-5mins) 소요 서비스에서 비동기 작업을 호출하는 스케줄러를 가지고 자바 봄 부팅 응용 프로그램이 있습니다.
서비스에서 같은 비동기 방법은 또한 봄 부팅 컨트롤러에서 API를 호출하는 UI 응용 프로그램 저점 호출 할 수 있습니다.
암호:
스케줄러
@Component
public class ScheduledTasks {
@Autowired
private MyService myService;
@Scheduled(cron = "0 0 */1 * * ?")
public void scheduleAsyncTask() {
myService.doAsync();
}
}
서비스
@Service
public class MyService {
@Async("threadTaskExecutor")
public void doAsync() {
//Do Stuff
}
}
제어 장치
@CrossOrigin
@RestController
@RequestMapping("/mysrv")
public class MyController {
@Autowired
private MyService myService;
@CrossOrigin
@RequestMapping(value = "/", method = RequestMethod.POST)
public void postAsyncUpdate() {
myService.doAsync();
}
}
스케줄러는 비동기 작업 시간 간격으로 실행되지만 사용자는 또한 UI에서 수동으로 실행할 수 있습니다.
그러나, 나는 그것이 실행의 중간에 이미있는 경우 비동기 방식을 다시 실행하지 않습니다.
그렇게하기 위해, 나는 메소드가 실행되는 경우에가는 플래그를 포함하고이 방법이 완료 전원이 꺼집니다 DB의 테이블을 만들었습니다.
내 서비스 클래스에서 이런 식으로 뭔가 :
@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");
}
}
이제 문제는 플래그가 때때로 다양한 이유 (응용 프로그램 재시작 등 다른 응용 프로그램 오류) 붙어 인해를 얻을 수 있다는 것입니다
그래서, 난 DB에서 봄 부팅 응용 프로그램이 배포 될 때마다 플래그를 재설정 할 때마다이 다시 시작됩니다.
내가 어떻게 할 수 있습니까? 유엔이 데이터베이스에 플래그를 설정하려면 내 환매 약정에서 메소드를 호출 할 수있는 곳에서 불과 봄 부팅 응용 프로그램이 시작된 후 방법을 실행하기 위해 어떤 방법이 있나요?
존 M :
여기 예에 대한 @PostConstruct 확인 https://www.baeldung.com/running-setup-logic-on-startup-in-spring