기존 스프링MVC웹프로젝트에 6개월 동안 회원정보 수정이 없는 회원정보를 배치와 스케줄을 이용해서 콘솔에 출력하는 기능을 추가하였습니다.
1. pom.xml (아래)
<!-- quartz 라이브러러리 배치작업 -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
<!-- 스프링 Quartz 도우미 라이브러리 배치작업 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.4.RELEASE</version>
</dependency>
2. IF_MemberService.java (아래)
/* 배치작업 */
public void testJobMethod() throws Exception;
3. MemberService.java (아래)
/* 배치작업 */
@Override
public void testJobMethod() throws Exception {
List<MemberVO> list = memberDAO.getMembersTime();
for(MemberVO memberVO : list) {
System.out.println(memberVO.getUser_id() + ":" + memberVO.getEmail());
}
System.out.println("6개월 동안 회원정보 수정이 없는 회원정보....");
}
4. root-context.xml (아래)
<!-- 배치작업 -->
<bean id="testJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 서비스 구현 객체의 빈 이름을 인자로 줍니다. -->
<property name="targetObject" ref="memberServiceImpl" />
<!-- 서비스 객체에서 주기적으로 실행될 메소드른 지정합니다. -->
<property name="targetMethod" value="testJobMethod" />
<!-- 동시 실행을 방지합니다. -->
<property name="concurrent" value="false" />
</bean>
<!-- 배치작업 테스트용 트리거 CronTrigger를 사용하여 2분 간격으로 실행되도록 지정했습니다.
<bean id="testJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="testJob" />
<property name="cronExpression" value="0 0/1 * * * ?" />
</bean>
-->
<bean id="testJobTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="testJob" />
<!-- 시작하고 1분후에 실행한다. (milisecond) -->
<property name="startDelay" value="60000" />
<!-- 매 24시간마다 실행한다.864000000 (milisecond) -->
<property name="repeatInterval" value="60000" />
</bean>
<!-- 배치작업 테스트용 스케줄러 -->
<bean id="testJobScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<!-- 앞에서 설정한 트리거를 등록합니다. 필요하면 여러개 만들어서 등록하면 됩니다. -->
<list><ref bean="testJobTrigger" /></list>
</property>
</bean>
5. IF_MemberDAO.java (아래)
public List<MemberVO> getMembersTime() throws Exception; //배치작업 6개월 동안 회원정보 수정이 없는 회원정보
6. MemberDAO.java (아래)
//배치작업 6개월 동안 회원정보 수정이 없는 회원정보
@Override
public List<MemberVO> getMembersTime() {
return sqlSession.selectList(namespace + ".listMembersTime");
}
7. memberMapper.xml (아래)
<!-- 배치작업 오라클용 getTime() 6개월 동안 회원정보 수정이 없는 회원 -->
<select id="listMembersTime" resultType="org.edu.vo.MemberVO">
<![CDATA[
select
*
from
tbl_member
where UPDATE_DATE < ADD_MONTHS(sysdate,-6)
]]>
</select>
<!-- 배치작업 Mysql용 now() 6개월 동안 회원정보 수정이 없는 회원정보
<select id="listMembersTime" resultType="org.edu.vo.MemberVO">
<![CDATA[
select
*
from
tbl_member
where UPDATE_DATE < DATE_SUB(now(), INTERVAL 6 MONTH)
]]>
</select>
-->
Ps. 빈(Bean) 그래프 보기
결과화면(아래)
소스정보: https://github.com/miniplugin/edu_ora
Ps. cronExpression 크론(스케줄데몬)표현식 설명.
다시 해석해 보겠습니다.
(6개의 자리-초,분,시,일,월,요일 로 구분됩니다.)
[1]0초 0
[2]시작20분 0/20 (/는 시작시간을 알림)
[3]시간 23,4-18
[4]일(불특정)?
[5]매월(모든)*
[6]요일 MON,TUE,WED,THU,FRI
위에서 분해한 것을 아래서 1줄로 표현(아래)
0 0/20 23,4-18 ? * MON,TUE,WED,THU,FRI
위 내용을 상세해석(아래)
- 0 은 매초로 해석해도 됨.
- 0/20 은 20분에서 시작
- 23,4-18 은 23시에1번실행,4시~18시까지 20분단위로실행
- ? 은 정해지지않은 날짜에서
- * (모든월에서)
- MON-FRI 는 월,화,수,목,금
Ps2. Cron 표현식 - 특수문자
각 특수문자의 의미도 살펴보겠습니다.
● * : 모든 값을 뜻합니다.
● ? : 특정한 값이 없음을 뜻합니다.
● - : 범위를 뜻합니다. (예) 월요일에서 수요일까지는 MON-WED로 표현
● , : 특별한 값일 때만 동작 (예) 월,수,금 MON,WED,FRI
● / : 시작시간 / 단위 (예) 0분부터 매 5분 0/5
● L : 일에서 사용하면 마지막 일, 요일에서는 마지막 요일(토요일)
● W : 가장 가까운 평일 (예) 15W는 15일에서 가장 가까운 평일 (월 ~ 금)을 찾음
● # : 몇째주의 무슨 요일을 표현 (예) 3#2 : 2번째주 수요일
기술참조: https://zamezzz.tistory.com/197
jstl 내부에 java변수와 로직을 넣을 일이 있을때 (0) | 2020.09.21 |
---|---|
첨부파일 확장자 비교용 변수 추가하기 (0) | 2020.07.13 |
기존 스프링 웹프로젝트 오라클용으로_2 (0) | 2020.05.23 |
기존 스프링 웹프로젝트 오라클용으로_1 (0) | 2020.04.30 |
스프링 시큐리티로 인증과 권한 테스트 작업OK (0) | 2020.03.11 |
댓글 영역