이번에 회사에서 간단한 배치프로그램을 만들게 되었다.
기존에 배치 프로그램을 한 번 정도 수업시간에 만든 적이 있었지만
스스로 해본 경우는 처음이라 기존에 패키지 내에 만들어져있던 클래스의 설정법들을 클론코딩 하게 되었다.
내가 만든 단계는
1. 해당 Scheduler 클래스를 스케줄러 패키지에 생성 , @Component 어노테이션 추가
2. 해당 클래스 내에 @Scheduled 어노테이션을 사용해 배치를 돌릴 메소드를 선언
3. 메소드 내에 대용량 처리가 요구되는 작업을 넣고 해당 내역을 남길 수 있도록 Log 추가
4. 해당 스케줄러를 dispatcher-servlet에 <bean>으로 생성하고 task:scheduler, task:executor 선언
--- 이 4번에서 문제가 발생하게 된다.
내 배치프로그램에 발생한 문제점은 중복실행이었다.
내가 추가했던 log는 3개에 불과했지만 진행 후에 기록되는 log는 6개였고
해당 메소드 내에 존재하는 for문 때문에 2번 실행되는 줄 알았으나
log 내용을 보면 하나의 배치프로그램이 돌아가고 난 뒤, 또 다른 배치프로그램이 뒤따라서 돌아가는 듯 보였다.
기존에 있는 배치프로그램의 설정들을 똑같이 따라했는데 왜 ? 이런 문제가? (나의 첫 반응)
아무튼 정말 어이없게도 가장 기본적인 지식의 문제였다.
애초에 해당 클래스에 @Component 를 선언해주었음에도 불구하고
dispatcher-servlet에 해당 클래스를 또 bean으로 등록했으니,,^^
context scan이 되면서 bean이 2번 선언된 상황..
실제로 해당 <bean>을 없애든 @Component를 없애든 배치는 1번만 돌게 되었고...
결론적으로는 <bean> 생성보다는 @Component로 어노테이션 선언해주는 것이
디폴트로 쓰이는 것 같아서 해당 내역대로 처리했다.
쉽게 생각해보면 정말 응?하게 되는 상황인데 있는 그대로 클론 코딩하려다가 실패 ㅎ
가장 기본적인 것이 가장 중요하다!
'Etc > 문제해결 기록하기' 카테고리의 다른 글
[Git] git push 오류, error: src refspec final does not match any가 뜨다. (0) | 2021.04.14 |
---|---|
[프로젝트] 오류 기록 - 1. illegalException의 발생 (0) | 2021.02.03 |
이클립스 로딩시 응답없음 문제 해결 (0) | 2020.12.11 |
(Java)윈도우7 자바 환경변수 설정 오류, 메모장 코드 cmd 컴파일 오류 (0) | 2020.09.23 |
댓글