개발/Spring Batch 6

Spring batch step loop 할 때 메모리 이슈

(한달 전에 삽질했던 내용인데 이제 씀) 지난번에 step을 loop 구조로 하는 것에 대한 포스팅을 했었다.http://marobiana.tistory.com/133 여기에는 주의해야할 점이 있다. 싱글톤 bean이 아닌 bean을 Step 단위로 loop를 돌릴 경우,Step이 수행될 때마다 새 bean이 생성되고,다음 loop로 넘어가도, 이전 스텝에서 생긴 bean은 메모리 해제가 되지 않는다. 그 bean들은 계속 누적이되어 memory leak을 일으킨다. 쓰레드덤프를 떠본 것 까진 아니지만일정한 속도로 여러번 batch를 수행시켰을 때 같은 시간 경과 후 (2시간 30분) job이 죽었다. 로그를 보니 Out of Memory였다. 나의 경우 singleton bean으로 처리하지 못했던 이..

개발/Spring Batch 2016.07.22

step을 loop 구조로 수행하기, step과 step간 파라미터 넘기기

보통은 한 step 내에서 Reader, Writer 구조로 잡고, reader 내에서 페이징을 하지만 아래 예제의 경우 한 step을 Reader처럼 두고, loop를 돌면서 Step 간의 페이징을 해볼 것이다. * 흐름에 대한 대략적인 정리라 컴파일은 따로 안해봤음 1. job.xml 설정 2. Reader Tasklet public class TestItemReaderTaskletimplements Tasklet { @Autowired private testDAO testDAO; private int pageSize; // TODO getter, setter @Override public RepeatStatus execute(StepContribution contribution, ChunkConte..

개발/Spring Batch 2016.06.22

Spring Batch 파티셔닝(partitioning) 예제(Database range query)

Batch job을 구성할 때 보통 reader - writer 구조로 작성한다.reader에서 페이징으로 row들을 읽어서, writer에서 commit interval 만큼 단건을 write 하는 방식이다. 나는 reader에서 range로 읽어서 range로 한방에 write 하려는 목적을 가지고 찾아본 결과파티셔닝이 적합해보여서 조사해보았다. 파티셔닝은 여러 일을 동시에 수행시킬 때 사용하기 유용하다. 1. 파티셔닝 (Partitioning)의 개념 파티셔닝이란, 병렬로 chunk 단위(각 slave들)을 동시에 수행하는 것이다.* chunk : reader, processor, writer를 수행하는 단위 (tasklet으로 통째로 구현하는 것도 가능) Master가 Partitioner로 각 ..

개발/Spring Batch 2016.05.25

Spring Batch decision으로 step 결정하기

보통은 step1 수행 -> step2 수행 -> step3 수행 이렇게 순차적으로 수행한다.실행되는 스텝이 내가 할일 끝나고 나면 다음 스텝을 지정해서 다음 스텝을 실행시킨다. 이번에 포스팅할 예제는step1 step2 가 있을 때 이런 규칙이 있다고 치자. - step2만 실행- step1 -> step2 : step1가 성공해야만 step2를 실행한다. skip1를 스킵할지 말지는 skipFlag의 값으로 분기할 것이다. decision 을 이용해서 스텝을 결정할 수 있다.설정은 아래와 같음. job.xml * step1을 스킵하고 step2만 실행하는 경우 decider1에서 skipFlag가 true이면, step2로 갈 수 있도록 한다. * step1 -> step2 인 경우 decider1에..

개발/Spring Batch 2015.10.29

Spirng Batch 로 Batch Job 만들기 (2)

저번 글에 이어서.. batch 프로젝트에서 소스가 잘 돌아가는지 보는 방법임. batch는 서버 필요없이 콘솔에서 로그를 보면 된다. 방법 GOGO! 1. run을 어떻게 할건지 설정한다. 프로젝트에서 우클릭 - Run As - Run Configurations... 2. 창이 뜰 것임. 좌측 Java Application - New를 누른다. 3. 위쪽에 Name을 정해주고 Project에는 project 이름 쓰고,Main Class 는캡쳐되있는 저 클래스 그대로 쓰면 된다. 4. Arguments 탭을 누르고 job.xml이 있는 위치, job 이름, -next 옵션을 붙이고밑에 짤렸는데 Run 버튼 누르면 로그들이 콘솔에 뜰 것이다.-next 옵션은 왜붙이는지는 잘 모름. VM arguments..

개발/Spring Batch 2012.08.17

Spirng Batch 로 Batch Job 만들기 (1)

이번에 일일 집계를 만들면서 spring batch를 처음 써봤다. 인터넷에 batch에 대한 이론 자료는 많으므로 여기엔 딱히 쓰진 않겠다. spring batch는 스케줄 등록하는 기능이 없다.그래서 Jenkins로 시간을 설정해서 빌드하고 batch는 spring batch를 썼다. 하루동안 사람들이 쓴 글의 총 수를 TEXT 테이블에서 셀렉트 해온 후 그 데이터를 AGGT(집계) 테이블에다가 넣는 예제이다. 두가지 방법이 있는데,첫번째는 비지니스 로직 없이 셀렉트해온 값을 바로 인서트 하는예제이다. (1) 비지니스 로직 없이 select 후 바로 insert 하기 1. XML에 JOB을 설정한다. .... -- 한 job에 스텝 여러개 추가 가능 -- query의 namespace+id -- da..

개발/Spring Batch 2012.08.16