이벤트 기간이 지난 상품들을 등록대기 상태로 바꾸는 기능을 추가해야 했습니다.
스케줄러를 해본 적이 없어서 사용자가 상품페이지로 들어갈 때마다
이벤트 날짜를 체크해서 update하는 방법도 생각했었지만, 그건 좀 아닌 거 같아서 scheduler를 구현하기로 했습니다.
Spring에서 Spring Scheduler와 Spring Quartz라는 2가지 방식으로 제공됩니다.
저는 Quartz 방법을 사용하기로 했습니다.
1. Quartz라이브러리 추가
pom.xml
<!-- Scheduling -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.0</version>
</dependency>
<!-- Scheduling end-->
2.Service 설정
GoodsEventSchdule.java
@Service("goodsEventScheduler")
public class GoodsEventSchedule {
@Resource(name = "goodsEventMapper")
GoodsEventMapper goodsEventMapper;
@Resource(name = "goodsMapper")
GoodsMapper goodsMapper;
/**
* 스케줄러(이벤트 기간 지난 상품 '등록대기'변환 )
*/
public void updateEventGoodsRegisterStats(){
List<EgovMap> goodsList = goodsEventMapper.selectEndEventGoods();
if(goodsList.size()>0){
for(EgovMap ele : goodsList){
GoodsVO vo = new GoodsVO();
vo.setGoodsId((String)ele.get("goodsId"));
vo.setRegistSttusCode("R");
goodsMapper.updateGoodsRegistSttus(vo);
}
}
}
}
3.Quartz bean 설정
context-scheduling.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<!-- 이벤트 상품 수정 job 설정 -->
<bean id="updateEventGoodsStatsJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="goodsEventScheduler" /><!--실행할 서비스 설정-->
<property name="targetMethod" value="updateEventGoodsRegisterStats" /><!--실행할 메소드 설정-->
<property name="concurrent" value="false" />
</bean>
<!-- 이벤트 상품 수정 트리거 -->
<bean id="eventGoodsStatsTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="updateEventGoodsStatsJob"/>
<!--매일 자정마다 실행-->
<property name="cronExpression">
<value>0 0 0 * * ?</value>
</property>
</bean>
<!-- 스케줄러 실행 -->
<bean id="eventGoodsStatsScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="eventGoodsStatsTrigger" />
</list>
</property>
</bean>
</beans>
cron방식으로 매일 자정 마다 실행하게 하였다. 스케줄러 되게 복잡하고 어려울거라구 생각했는데
생각보다 간단하게 구현한 거 같습니다.
'Java > Spring' 카테고리의 다른 글
[eGovFramework] 폼 검증(Form validation)하기 (0) | 2020.06.15 |
---|---|
Math 클래스 (0) | 2020.05.25 |
String, StringBuffer (0) | 2020.05.25 |
[JSTL] import (0) | 2020.05.22 |
제네릭(Generic) (0) | 2020.05.20 |
댓글