봄 부팅 응용 프로그램 시작 후 메서드를 호출

수밋 :

나는 작업을 완료하는 데 몇 분 정도 (보통 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

추천

출처http://43.154.161.224:23101/article/api/json?id=168422&siteId=1