본 글을 작성하기에 앞서 작성자는 신입 개발자가 되기 위한 사람이며
공부 겸 저장을 위한 용도로 사용중임을 알립니다.
완벽하게 만들기 보다 우선적으로 실행이 가능하게 만드는 것을 목적으로 합니다..
만약 글을 읽고 계신다면 알맞지 않은 용어를 사용하는 점에서 양해 부탁드리겠습니다.
* @Scheduled를 사용하지 않는 방법을 작성 중이므로 어노테이션을 사용하는 방법을 찾으신다면 돌아가 주세요.
1. Quartz 관련 라이브러리와 보조 라이브러리인 Spring-context-support 라이브러리를 추가합니다.
Quartz maven / Spring-context-support maven을 검색하시면 라이브러리를 얻어올 수 있습니다
* 보시면 spring-context-support는 쓰고 있는 스프링 버전과 일치하는 버전으로 가져왔습니다.
2. Service 계층의 설정.
2-1 서비스 계층에서 본인이 자동실행하고자 하는 메서드를 생성시켜둡니다.
2-2 서비스 구현 계층에서 자동 실행하고자 하는 메서드에 나타내고 싶은 기능을 넣습니다.
테스트용으로 로그를 찍어두었습니다.
여기서 @Serivce 어노테이션에 이름을 줍니다. 이때 설정해둔 이름으로 XML에서 사용할 것임을 아시면 되겠습니다.
3. root-context.xml 설정
설정은 위와 같이 하면 되고 변경해야 할 부분은
첫 번째 bean태그의 "targetObject"와 "targetMethod"
두 번째 bean 태그의 "cronExpression"입니다.
targetObject는 서비스 계층에서 @Service 어노테이션에 넣은 이름을 넣어주시면 됩니다.
targetMethod는 참조한 targetObject에서 설정한 서비스 구현체에 존재하는 메서드 이름을 넣으면 됩니다.
즉, 자동실행을 하고 싶은 메서드의 메서드 이름을 넣으시면 되겠습니다.
마지막으로 "cronExpression"의 value값은 사용하고자 하는 크론 표현식을 넣어주시면 되겠습니다.
* 주의할 점
- 크론표현식을 사용할 때 3초 간격으로 설정한다 가정했을 때 "0/3 * * * * * *"를 넣을 수도 있는데
"Support for specifying both a day-of-week AND a day-of-month parameter is not implemented."
에러가 발생합니다.
왼쪽부터 " 초, 분, 시, 일, 월, 요일, 연도"로 구성돼있으며 "
하지만.. 직접 "0/3 * * *? * ? *"를 넣어줬을 때는 실행이 되지 않았습니다.
다음과 같은 에러가 발생.
" '?' can only be specified for Day-of-Month -OR- Day-of-Week. "
여기서 Day-of-Month와 Day-of-Week는 일과 요일을 의미하며 표현식에서 "?"는 일과 요일에서만 사용 가능하다고 하는데 안 되는 이유는 잘 모르겠습니다..
4. 결과
'Back-End > Spring' 카테고리의 다른 글
(2) QuerydslRepositorySupport - Tuple 활용 (0) | 2021.03.09 |
---|---|
(1) QueryRepositorySupport (0) | 2021.03.09 |
thymeleaf 사용 시 날짜포맷팅 (2) | 2021.03.01 |
테스트폴더에 lombok 적용 (0) | 2021.03.01 |
Querydsl 설정 (0) | 2021.03.01 |