스프링 스케줄러에 대해 알아보고 적용해보려고 한다.
( 개인 프로젝트에 적용해보려고 했는데, 아직 어디에 쓸지 생각이 안나서 보류중이지만, 이후 기능을 추가하거나 나중에 무조건 쓸거라 생각한다. )
스케줄러의 종류로는 Scheduler 말고 Quartz 라는 방식도 있다고 하는데 단순한 스케줄러 구현에서는 Scheduler 를 사용한다고 한다.
Quartz는 조금 더 세밀하게 동작이 가능하지만 구현이 복잡하다는 단점을 가지고 있다.
먼저, 가장 기본이 되는 것부터 동작하는 것에 대해 이해하고 Quartz 는 나중에 필요할 때 추가로 공부해보려고 한다.
스케줄러는 간편하게 @Scheduled 어노테이션을 사용해서 일정한 시간 간격, 또는 특정 시간에 코드가 실행되도록 설정할 수 있도록 도와준다.
설정관련된 부분은 아래 블로그를 참고하면 좋을 것 같다.
특히 Cron 설정에 대한 부분은 확인이 필요하다.
https://dev-coco.tistory.com/176
처음 설정하는 법은 간단하다. Application 에 어노테이션을 추가해준다.
@SpringBootApplication
@EnableJpaAuditing
@EnableScheduling // 스케줄러
@EnableCaching
public class ShopApplication {
public static void main(String[] args) {
SpringApplication.run(ShopApplication.class, args);
}
}
내가 테스트 한 스케줄러는 2가지이다.
1. 5초마다 반복되는 스케줄러
2. 지정한 시간에 반복되는 스케줄러
내 생각에는 지정한 시간에 반복되는 스케줄러를 많이 사용할거라고 생각한다. ( 데이터에 관련된 ??.. )
테스트를 위해 Service 에 테스트 할 2가지 서비스를 만들었다.
여기서, 어떤 기능을 반복하려고 설정할 때, 해당 메서드는 파라미터가 있으면 에러가 발생한다.
only no-arg methods may be annotated with @scheduled
@Override
public void schedulerTestDelay() {
System.out.println("5초마다 반복 되는 스케줄러 테스트! 현재시간 : " + LocalDateTime.now());
}
@Override
public void schedulerTestCron() {
System.out.println("지정한 시간에 반복 되는 스케줄러 테스트! 현재시간 : " + LocalDateTime.now());
}
그리고 또한 서비스를 호출하는 컨트롤러를 만들었다.
1번 테스트는 fixedDelay 를 통해 5초마다 실행되도록 하였으며,
2번 테스트는 매년,매월,매일,00시,46분 00초에 실행되도록 구성했다.
@Scheduled(fixedDelay = 5000)
public void schedulerDelayTest() {
goodsService.schedulerTestDelay();
}
@Scheduled(cron = "0 46 0 * * *")
public void schedulerTestCronTest() {
goodsService.schedulerTestCron();
}
적용이 정상적으로 되면 옆에 시계모양이 나타나는 것을 볼 수 있다.
이제 애플리케이션을 실행해보면 아래와 같이 확인할 수 있다.
'Spring > Spring-detail' 카테고리의 다른 글
Multipart 는 HTTP POST 로만 사용 (1) | 2023.01.11 |
---|---|
spring boot docker mysql 기본설정 (0) | 2023.01.09 |
Springboot AOP 적용 + 어노테이션 기반 (0) | 2023.01.03 |
Mockito BDDMockito 의 차이점 (1) | 2022.11.04 |
단위테스트(Unit Test) 를 작성하는 이유 (0) | 2022.11.04 |
댓글