스프링부트 Scheduled 사용법
스프링부트에서 스케줄러를 사용하기 위해서는 Application에 @ EnableScheduling 해줘야 한다.
현재 시간이 시작 시간과 종료시간 사이이면 현재 상태가 진행 중이라 표기되고 그렇지 않으면 대기 중이라고 표시 되록 만들 예정이다 위의 사진은 완성한 예시이다.
스케줄러 dto
package org.example.study1.scheduled;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class ScheduleDto {
private String title;
private int startTime;
private int endTime;
private int status; // 0 이면 현재 대기 1이면 실행중 인거. db에는 0으로만 값을 넣을꺼다.
}
스케줄러 등록하는 부분은 알아서 만들어보자.
스케줄러 목록 불러오기
나는 1분마다 서버가 자동으로 db에 접근하여 스케줄러 목록을 불러와 현재대기 중인지 진행 중인지를 1분마다 계속 저장하도록 만들었다.
@Service
public class ScheduleService {
private List<ScheduleDto> data =new CopyOnWriteArrayList<>();
private final ScheduleMapper scheduleMapper;
public ScheduleService(ScheduleMapper scheduleMapper) {
this.scheduleMapper = scheduleMapper;
}
//스케줄 목록 조회
public List<ScheduleDto> selectSchedule(){
return data;
}
//스케줄 등록
public void register(ScheduleDto scheduleDto) {
scheduleMapper.register(scheduleDto);
dataSet();
}
//경매가능한 목록 조회 하기
@Scheduled(fixedRate = 60000) // 1분마다 실행
public void dataSet(){
List<ScheduleDto> newData=scheduleMapper.selectSchedule();
int nowTime= LocalTime.now().getMinute();
for (ScheduleDto newDatum : newData) {
int startTime = newDatum.getStartTime();
int endTime = newDatum.getEndTime();
if (startTime <= nowTime && nowTime <= endTime) {
newDatum.setStatus(1);
}
}
this.data=newData;
}
}
여기서 1분마다 db에서 조회한 값을 저장할 이름을 data라 하는 리스트에 저장하는데 왜 CopyOnWriteArrayList가 사용되었냐면
나는 등록할 때마다 다시 조회하도록 만들었기 때문에 서로 충돌이 일어나지 말라고 CopyOnWriteArrayList를 사용하였다.
CopyOnWriteArrayList는 여러 스레드가 동시에 이 data에 접근할 때 복사본을 생성하여 동시성 문제를 방지할 수 있다.
@Scheduled(fixedRate = 60000) // 1분마다 실행
public void dataSet(){
List<ScheduleDto> newData=scheduleMapper.selectSchedule();
int nowTime= LocalTime.now().getMinute();
for (ScheduleDto newDatum : newData) {
int startTime = newDatum.getStartTime();
int endTime = newDatum.getEndTime();
if (startTime <= nowTime && nowTime <= endTime) {
newDatum.setStatus(1);
}
}
this.data=newData;
}
스케줄러 코드 부분의 for문은 현재 시간하고 시작시간과 끝나는 시간이 그 사이에 있는지 확인하여 데이터를 수정하여 전달하기 우해 만든 부분이다.
반응형
'자바 공부 > 스프링공부' 카테고리의 다른 글
스프링부트 시큐리티(Security) 6 config 작성방법 (1) | 2024.09.27 |
---|---|
스프링 부트 웹소켓 Stomp 사용법 (0) | 2024.09.19 |
스프링부트 메이븐 - MyBatis 사용법 (2) | 2024.09.04 |
Jpa를 이용하여 게시판 만들어 보기 4 (0) | 2024.08.31 |
Jpa를 이용하여 게시판 만들어 보기 3 (0) | 2024.08.19 |