배치 템플릿에서 오류가 발생했습니다.
- 작성자 :
- 김*수
- 작성일 :
- 2013-08-08 12:52:13
- 조회수 :
- 860
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
수고하십니다.
이클립스에서 "New Batch Template Project"를 통해 배치 웹 프로젝트를 생성했습니다. 샘플로 생성된 ibatisToIbatisJob.xml을 sschedule job에 등록해서 실행시켰습니다.
관련 ibatis queryid는 다음과 같이 수정했습니다.
<select id="getAllCustomerCredits" resultMap="result">
<![CDATA[select ID, NAME, CREDIT from CUSTOMER where ID<=9]]>
</select>
where ID<=9로 하면 9건씩 정상처리 되는데, 10 이상으로 하면 계속 무한적으로 처리되는 현상이 발생합니다. 즉, 스케쥴 주기가 적용되지 않고 해당 레코드에 대해 무한적으로 처리됩니다.
jdbcToJdbcJob은 정상적으로 동작합니다.
무엇이 잘못된 것인가요?
이클립스에서 "New Batch Template Project"를 통해 배치 웹 프로젝트를 생성했습니다. 샘플로 생성된 ibatisToIbatisJob.xml을 sschedule job에 등록해서 실행시켰습니다.
관련 ibatis queryid는 다음과 같이 수정했습니다.
<select id="getAllCustomerCredits" resultMap="result">
<![CDATA[select ID, NAME, CREDIT from CUSTOMER where ID<=9]]>
</select>
where ID<=9로 하면 9건씩 정상처리 되는데, 10 이상으로 하면 계속 무한적으로 처리되는 현상이 발생합니다. 즉, 스케쥴 주기가 적용되지 않고 해당 레코드에 대해 무한적으로 처리됩니다.
jdbcToJdbcJob은 정상적으로 동작합니다.
무엇이 잘못된 것인가요?
A
안녕하세요. 김기수님.
추가하신 where 조건의 문제가 아니라 처리되어야 할 전체 데이터가 IbatisPagingItemReader의 기본 페이징 크기인 10 이상이신 경우입니다.
IbatisPagingItemReader는 기본적으로 10개 단위로 페이지처리하도록 되어 있습니다. (pageSize 속성을 통해 변경 가능)
이 경우는 query xml 파일에 페이징 처리를 위한 추가 지정이 필요합니다.
(_skiprows, _pagesize, _page 속성 활용)
MySQL의 경우는 다음과 같이 처리하시면 됩니다.
<select id="getPagedCustomerCredits" resultMap="customerCreditResult">
select id, name, credit from customer order by id asc LIMIT #_skiprows#, #_pagesize#
</select>
Oracle의 경우는 다음과 같이 하시면 되구요.
<select id="getPagedCustomerCredits" resultMap="customerCreditResult">
select * from (
select * from (
select t.id, t.name, t.credit, ROWNUM ROWNUM_ from customer t order by id
)) where ROWNUM_ <![CDATA[ > ]]> ( #_page# * #_pagesize# )
) where ROWNUM <![CDATA[ <= ]]> #_pagesize#
</select>
그럼, 즐거운 하루되십시오.
감사합니다.
추가하신 where 조건의 문제가 아니라 처리되어야 할 전체 데이터가 IbatisPagingItemReader의 기본 페이징 크기인 10 이상이신 경우입니다.
IbatisPagingItemReader는 기본적으로 10개 단위로 페이지처리하도록 되어 있습니다. (pageSize 속성을 통해 변경 가능)
이 경우는 query xml 파일에 페이징 처리를 위한 추가 지정이 필요합니다.
(_skiprows, _pagesize, _page 속성 활용)
MySQL의 경우는 다음과 같이 처리하시면 됩니다.
<select id="getPagedCustomerCredits" resultMap="customerCreditResult">
select id, name, credit from customer order by id asc LIMIT #_skiprows#, #_pagesize#
</select>
Oracle의 경우는 다음과 같이 하시면 되구요.
<select id="getPagedCustomerCredits" resultMap="customerCreditResult">
select * from (
select * from (
select t.id, t.name, t.credit, ROWNUM ROWNUM_ from customer t order by id
)) where ROWNUM_ <![CDATA[ > ]]> ( #_page# * #_pagesize# )
) where ROWNUM <![CDATA[ <= ]]> #_pagesize#
</select>
그럼, 즐거운 하루되십시오.
감사합니다.