5분에 한 번씩 자동 재고 정리가 될 수 있도록 만들어 보자
spring Scheduled/batch를 사용하려면 의존성 주입이 필요하다
그리고 어노테이션을 붙혀줘야한다
여기에 어노테이션 붙이는 건 처음이다
그리고 batch를 위한 세팅을 해야 한다
여기를 참고하자
application.properties
true여야 배치가 작동하고
always를 해서
혼자 저렇게 db에 접근해 테이블은 만들고
기록을 만들 수 있게 한다
둘 중 하나라도 없으면 작동이 안 된다
vbankConfig
아주 심플하게 만들었다
왜냐면 아직 배치에 대해 이해를 다 못했기 때문이다
그래서 필요하다고 생각하는 거만 간단하게 구현하였다
이글들을 참고해보자
https://wan-blog.tistory.com/53
https://cheese10yun.github.io/spring-batch-basic/
다 읽으면 상당히 복잡한데
필요한 부분만 빼다 써 보자
모르는 부분은 나중에 필요해지게 되면
공부를 하고 있을 것이다
scanVbank
execute 외에도 StepExecutionListener 임 플리 멘트 하면
beforestep/afterstep도 사용할 수 있다
vbankDao
여기서 처음 join쿼리문을 사용했다
vbank테이블에서 현재보다 작은 기한을 가진 paymentid를 찾아
예약 테이블과 조인한 뒤 같이 삭제한다
jobSchedular
@Scheduled(fixedDelay = 1000*100)로 실행 간격을 정할 수 있다
정하는 방법도 여러 가지이다(1000=1초이다)
배치를 실행시킬 때는 매번 다른 파라미터가 들어가야 한다
JobParameters JobParameters=new JobParametersBuilder().addString("key","vbank"+LocalDateTime.now().toString()).toJobParameters();
안 그러면 작동하지 않고
db를 조회하면 All steps already completed or no steps configured for this job라고 되어있다
테스트
지정시간마다 배치파일이 잘 실하아 되고 있다
13:53분에
(1000*300)=5분으로 설정했다 13:58분/14시 3분에 작동할 것이다
예약을 하고 테스트해보자
3개는 2시까지 입금되지 않으면
스케줄러+배치가 작동해서
삭제할 것이다
3개는 3시까지 입금되지 않으면
스케줄러+배치가 작동해서
삭제할 것이다
before
채번 취소를 하지 않는 이유는
아임 포트 문의 결과
시간이 넘어서 입금이 되면
pg사에서 가맹점 통보 없이 알아서
막아준다고 한다
13:58분 작동
두시 이전이기 때문에 달라지는 건 없다
14:03
농협 중앙은행이 사라졌다
와우! 재고정리 성공!
처음에 이런 게 있다는 게 알았을 때 너무 신기했다
배치를 좀더 공부해서 잘 써먹고 싶다
15:02
이제 예약취소 구현으로 가보자!