상세 컨텐츠

본문 제목

6개월 동안 회원정보 수정이 없는 회원정보를 배치와 스케줄이용해서 출력

JSP·자바·코틀린

by 김일국 2020. 6. 5. 22:12

본문

기존 스프링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) 그래프 보기

 

Beans Graph

 

결과화면(아래)

 

소스정보: https://github.com/miniplugin/edu_ora

 

miniplugin/edu_ora

기존 스프링웹프로젝트를 오라클용으로 변환. Contribute to miniplugin/edu_ora development by creating an account on GitHub.

github.com

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

 

[Cron] 크론(cron) 표현식 정리

■ Cron (크론) cron이란? 유닉스 계열의 잡 스케줄러 ● Cron 표현식 - 필드 Cron 스케줄러의 정규 표현식입니다. 7개의 각 필드로 구성되어 있으며, 각 필드의 내용은 아래와 같습니다. 자세한 설명

zamezzz.tistory.com

 

관련글 더보기

댓글 영역