일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- BFS
- 스프링부트
- 자바ORM표준JPA프로그래밍
- JPA
- java
- 리코쳇로봇
- 라이엇 API
- 백엔드 스쿨3기
- 전적 검색
- 인텔리제이 에러
- 더티체킹
- 백준
- DFS
- 영속성
- 알고리즘
- 테크잇
- 멋쟁이사자차럼
- 올리브영 고객센터
- 인프런
- 시소 짝꿍
- 조회수중복
- 스프링 입문을 위한 자바 객체 지향의 원리와 이해
- 자바
- 최주호
- 김영한
- 카카오2023신입공채
- 프로그래머스
- 엔에첸
- 포트 죽이는법
- already use
Archives
- Today
- Total
My Blog
스프링 스케줄러와 처리 본문
프로젝트를 진행하다가 마감시간이 지난 공고글에 대해 마감을 해줘야하는 부분이 있었다.
@Scheduled(fixedRate = 60000)
@Transactional
public void checkTimeDeadLine() {
List<RecruitmentArticle> all = recruitmentRepository.findByDeadLineDateBeforeAndIsDeadLine(LocalDateTime.now(),
false);
for (RecruitmentArticle article : all) {
if (LocalDateTime.now().isAfter(article.getDeadLineDate())) {
System.out.println("article.getArticleName() = " + article.getArticleName());
article.setDeadLine(true);
}
}
}
마감이 다 찬것은 서비스단에서 해결할 수 있었는데, 마감시간을 서비스단에서 어떻게 처리할까 고민하던 찰나에 스케줄러를 사용하기로 했다.
스케줄러를 쓰려면 스프링부트를 실행하는 메인 문에
@SpringBootApplication
@EnableJpaAuditing // @EntityListeners(AuditingEntityListener.class) 가 작동하도록 허용
@EnableScheduling //스케쥴링 사용 시 추가
public class OlolApplication {
public static void main(String[] args) {
SpringApplication.run(OlolApplication.class, args);
}
}
@EnableScheduling 어노테이션을 달아줘야 하고
Component어노테이션이 포함된 어노테이션이 달려있는 곳에서 사용할 수 있다
즉 컨트롤러, 서비스, 리파지토리에서 사용할 수 있다.
스케줄러에는 여러 옵션이 많은데 나는 그중에
fixedRate = 60000
를 사용했다. 이 코드는 1분에 한 번 실행되게 했다.
원래는 모든 게시글을 findAll해서 마감시간과 현재시간을 비교해서 지났으면 DeadLine(마감을 알려주는 변수)를 true로 바꾸려 했는데
생각보다 너무 불필요한 데이터들이 많이 뽑혀왔었다.
그래서 고민하던 찰나에
List<RecruitmentArticle> findByDeadLineDateBeforeAndIsDeadLine(LocalDateTime localDateTime, boolean DeadLine);
이렇게 값을 찾아올때 DeadLineDate가 파라미터 값보다 이전 값인 값이랑
이미 마감표시된 공고글이 아닌 것들만 뽑아오게 했다.
그랬더니 마감시간이 지난 테스트용2이 한 번 찍힐때 마감표시가 되니
그 이후 스케줄링에서는 찍히지 않는 모습을 볼 수 있었다!(메모리를 아낀거같아서 좋았다)
위에는 findAll을 한 상태이고
아래에는 findByDeadLineDateBefore를 한 후 이다.
확실히 쿼리가 줄어든 걸 볼 수 있다.
728x90
'스프링부트' 카테고리의 다른 글
URL에서 객체로 데이터 받는 법 (1) | 2023.12.01 |
---|---|
스프링부트 recompile시 서버 재시작 방법 (0) | 2023.11.30 |
쿠키에 대해서 (0) | 2023.06.30 |
스프링부트에ckeditor5 적용시키는 방법 (0) | 2023.06.23 |
@valid 와 BindingResult가 동작하지 않는다. (0) | 2023.06.13 |
Comments