ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 배치 프로그램 (Batch Program) 예제 두번째
    Spring/배치 프로그램 2018. 9. 7. 10:34

    앞서 말했던 배치 프로그램으로 비밀번호 변경 메일 송신 여부를 관리할 수 있다. 
    가입일로부터 현재가 1년 이상 지났다면 그 계정에 대한 정보를 가져와 적절한 처리를 할 수 있도록 한다. 이전 예제를 참조해야 더 정확한 이해가 가능하다.

    이해 안가는 부분 있다면 이전 포스팅 참조

    MBR 테이블에 4명의 사용자가 있고, 가입일이 2015년으로 현재보다 2년 이전이다. 쿼리문을 통해 가입일이 현재 기준으로 1년 이상 된 계정의 ID 5초마다 출력하는 배치 프로그램 작성해보자.

    테이블에 해당하는 모델 VO  작성 후 myBatis 이용해 MVC 구조로 코드 작성.

    Dao 인터페이스. MemberVO 리스트를 가져온다.

    DaoImpl 클래스. MVC 패턴을 벗어나지 않는다.

    Biz 인터페이스. List가 아니라 Stream을 사용한다. Stream은 리스트와 같은 역할을 하는 객체로 자바8부터 지원한다. 속도가 월등히 빠르기 때문에 List 사용을 지양하는 추세라고 한다. myBatis에서 Stream을 지원하지 않기 때문에 Dao에서는 List를 사용했다.

    다음과 같이 stream() 메소드를 사용하면 리스트 형태로 가져올 수 있다.


    dormantAccountDaoSql.xml 
    ADD_MONTHS 함수를 사용해 가입일 1년 이전인 모델 리스트로 가져올 수 있다.


    dormantAccountDaoSql.xml 
    ADD_MONTHS 함수를 사용해 가입일 1년 이전인 모델 리스트로 가져올 수 있다.

    jobScheduler.xml 
    작성한 Dao와 Biz 에 대해 Bean 등록한다 (빨간색)

     배치 프로그램 등록 위해
    1) JobDetailFactoryBean 클래스 등록
    2) CronTriggerFactoryBean 등록해 주기 설정
    2가지 설정 해준다(녹색)

    3) SchedulerFactoryBean에 트리거를 등록한다(초록색)

    BatchContext.java 만들어 다음과 같이 작성. 
    start() : Context 객체 없다면 새로 생성해 Configuration 파일 수행시킨다. 
    getBean() : 리턴 타입에 맞춰 Bean 객체를 생성. 모든 타입이 올 수 있기 때문에 제네릭(<T>)으로 지정

    DormantAccountJob.java 앞서 작성한 BatchContext의 getBean 메소드를 사용해 Biz 빈 객체를 생성한다. Biz 객체를 이용해 멤버 리스트를 가져온다. Stream 객체는 다음과 같이 forEach 메소드를 제공한다. 매개변수가 제네릭으로 자동완성되는데 우리가 의도한 MemberVO로 맞춰주면 된다. accept 메소드를 오버라이딩 하는데, 이때 매개변수에 리스트의 멤버가 하나씩 가져와 원하는 처리를 해줄 수 있다. 코드에서는 ID만 가져왔지만 여기에 이후 작업을 하면 된다.

    Main.java 
    BatchContext의 start 메소드 통해 배치 프로그램 수행하면

    조건에 해당하는 아이디들이 주기적으로 출력되는 것을 확인할 수 있다. 이를 가지고 적절한 동작을 수행할 수 있을 것이다.




    'Spring > 배치 프로그램' 카테고리의 다른 글

    배치 프로그램 (Batch Program) 작성 예제  (0) 2018.09.07
Designed by Tistory.