Service 객체를 넣어주어서 시간마다 실행될 Method를 넣어준다.
이렇게 되면 20000 → 20초마다 계속 이 Method들을 불러와서 거래가 완료되었는지 점검해주고 체크를 해준다.
@Service
public class AuctionService {
@Autowired
private ItemsDao items_dao; // 경매 관련 데이터 접근 객체
@Scheduled(fixedRate = 20000) // 5초마다 이 스케츌 Method를 실행시킨다
public void checkAuctionStatus() {
// 경매 종료를 확인하는 로직
// auction_list_view를 가져와서 a_sledding (진행 여부)를 확인할 수 있다.
List<ItemsVo> items = items_dao.findActiveAuction();
// 진행 여부를 판가름 하기위해서 boolean Method를 가져와서 참거짓을 밝힌다.
for(ItemsVo item : items) {
// 만약에 현재 시간이 경매 마감시간을 넘어간다면,
if(isAuctionEnded(item)) {
int a_idx = item.getA_idx();
// 경매 마감시간이 넘어간 요소의 진행 여부를 종료 시켜준다.
int res = items_dao.update_auction_service_end(a_idx);
// 필요한 추가 작업 (예: 알림발송등등) -- 추가질문요소
//items_dao.updateAuctionEnd(item.getA_idx());
}
}
}
// 경매 종료 여부를 판단하는 로직
private boolean isAuctionEnded(ItemsVo item) {
// 경매 종료 시간을 String에서 Date Type으로 변환 시키기
String endTimeString = item.getA_endtime();
// 날짜 형식을 yyyy-MM-dd HH:mm:ss으로 출력한다.
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date endTime = dateFormat.parse(endTimeString);
// Date Type으로 바꾼 현재 시간(new Date)를 비교한 참거짓값을 반환한다.
return endTime.before(new Date());
} catch (Exception e) {
e.printStackTrace();
return false;
// TODO: handle exception
}
}
}
해당 Method에 사용된 Dao
// AuctionService 객체 매순간 5초씩 경매 시간이 종료되었는지 확인해주는 로직
public List<ItemsVo> findActiveAuction() {
return sqlSession.selectList("items.findActiveAuction");
}
// 현재시간이 마감시간을 넘어선 객체를 거래종료 시켜준다.
public int update_auction_service_end(int a_idx) {
return sqlSession.update("items.update_auction_service_end", a_idx);
}
해당 mapper로 사용된 items.xml
<!-- 5초동안 List에서 경매조건이 끝나거나 끝나있지 않은 항목들 검색해서 가져오기 -->
<select id="findActiveAuction" resultType="items">
select * from auction_list_view
</select>
<!-- 경매 마감시간이 넘어간 요소의 진행 여부를 종료 시켜준다. -->
<update id="update_auction_service_end" parameterType="int">
update auction
set a_sledding = 'n'
where a_idx = #{ a_idx }
</update>
여기서 오류잡기! 이런 오류들이 계속 console에 찍히는데,
End time is null for item: 68
End time is null for item: 67
End time is null for item: 66
End time is null for item: 65
End time is null for item: 51
End time is null for item: 69
End time is null for item: 68
End time is null for item: 67
End time is null for item: 66
End time is null for item: 65
End time is null for item: 51
End time is null for item: 69
End time is null for item: 68
End time is null for item: 67
End time is null for item: 66
End time is null for item: 65
End time is null for item: 51
요렇게 종료예정 시간이 들어가있지 않은거 (a_endtime) 때문에, 오류가 console에 입력이 된다.
'SpringBoot↗' 카테고리의 다른 글
Spring)Rest API로 CRUD 정보 처리하기 (0) | 2024.08.05 |
---|---|
Spring) ckEditor 사용법 / JSON으로 쉽게 변환시켜서 사용하기 (0) | 2024.08.05 |
게시판4(게시글 번호 정리/ 댓글 Paging 기능 / 댓글 삭제 기능) (1) | 2024.07.25 |
Dao에서 SqlSession 받아오기 (Setter 수동, Constructor 수동, Auto 완전자동) (0) | 2024.07.24 |
게시판3 댓글 작성 로직 만들기 (1) | 2024.07.24 |