프로젝트를 진행하면서 매 주 혹은 매 일마다 유저 테이블의 특정 컬럼 값의 데이터를 초기화 시켜야하는 문제가 발생했다.
위 문제를 스케쥴러를 사용하여 처리하고자 하였는데 검색해보니 사용하려하는 MySQL 자체에서 제공하는 스케쥴러와 Java 에서 제공하는 스케쥴러 두 가지 방식이 존재하는 것을 알았다.
나는 위 두가지 방법 중 Java 에서 제공하는 스케쥴러 기능을 사용하기로 했는데 그 이유는 DB 에 스케쥴러를 적용할 경우 현재 개발 과정에서는 H2 데이터베이스를 사용하기 때문에 배포 이후 실제 사용하는 MySQL 데이터베이스에 스케쥴러를 설정하여 테스트를 진행해야 하는데 Java 에서 제공하는 스케쥴러를 사용하면 DB 가 변경되어도 메소드에서 호출하는 JPA 쿼리가 자동으로 변경된 데이터베이스로 쿼리를 변경하여 처리하기 때문이다.
1. @Scheduled 어노테이션을 사용하기 위해 메인 어플리케이션에 @EnableScheduling 설정
2. 반복적으로 실행하고자 하는 메소드에 @Scheduled 어노테이션 사용
3. 메소드 반복 실행 주기를 설정 및 기준 시간 설정
반복 주기 표현은 @Scheduled 어노테이션의 속성 값 마다 표현 방법이 다르며 나는 cron 표현식을 사용하였다
- 반복 주기 및 기준 시간 설정 참고 블로그 -
[Spring Boot] @Scheduled을 이용해 일정 시간 마다 코드 실행하기
@Scheduled Spring Boot에서 @Scheduled 어노테이션을 사용하면 일정한 시간 간격으로, 혹은 특정 시간에 코드가 실행되도록 설정할 수 있다. 주기적으로 실행해야 하는 작업이 있을 때 적용해 쉽게 사용
dev-coco.tistory.com
위와 같이 @Schedule 어노테이션을 사용하여 반복적으로 쿼리 이벤트를 실행시키게끔 설정하여 문제를 해결하였다.
'프로젝트' 카테고리의 다른 글
[GitHub] GitHub pages 를 사용해 리액트 프로젝트를 배포하기 & 수정 배포하기 (0) | 2024.07.22 |
---|---|
[Spring Boot, React] 이미지를 base64 로 인코딩하여 전송하여 img 태그를 사용하여 출력하기 (0) | 2024.07.19 |
[GitHub] Fork Repository 최신화하기 (0) | 2024.07.17 |
[이력서] (0) | 2024.06.03 |
Oracle Cloud 오류 ( Error: NJS-500: connection to the Oracle Database was broken ) ( 해결 완료 ) (2) | 2024.04.25 |