Spring Batch - Processor

return null를 할 경우 어떻게 처리 될까 궁금하여 =0=;; 복사 & 붙이기 ^^ return null item이 진행 되지 않는다.. 이말은 즉 writer에게 넘어가지 않는다. ㅡ0- transaction에서 동일한 id가 입력되어 오류가 발생 했는데. set를 이용하여 id 체크하고 중복이면 null를 뱉어내면 크크크 문제가 해결될듯.. process O process ( I  item) throws Exception Process the provided item, returning a potentially modified or new item for continued processing. If the returned result is null, it is assumed that processing of the item should not continue. Parameters: item  - to be processed Returns: potentially modified or new item for continued processing, null if processing of the provided item should not continue. Throws: Exception

Spring Batch - JobParameters Default Value 만들기

Spring batch에서 JobParameters에 입력되지 않은 값에 대한 default value를 설정 해야 할때는 아래와 같이 하자. <property name="userId" value=" #{jobParameters['userId']==null?'-':jobParameters['userId']} "></property> 위의 userId 속성 값 지정을 jobparameters로 di받아서 사용하는데. 위 방식으로 하면 userId가 입력 되지 않았을 경우, 즉 null인 경우 '-' 로 설정 되고, 입력되었을 경우 값이 전달 된다. 다른 방식은 SpEL를 더 찾아봐야 겠지만...나의 요구 사항은 여기 까지 ^^

Spring Batch - TaskletStep 작성

이번 요구사항은 특정 조건일 경우 이후 스텝을 진행할 것인가 말것인가에 대한 결정을 해야한다. 일단 step flow를 조정하는건 다음으로 넘기고, 특정 조건를 검사하는 스텝을 만들어야 하는데, 이런 경우에는 TaskletStep를 사용한다고 한다. TaskStep는 Reader + Processor + Writer의 구성이 아닌 경우의 스텝을 정의 할 때 사용한다. 구현방법은 http://static.springsource.org/spring-batch/reference/html/configureStep.html 의 5.2.2를 참조하면 될꺼 같고 자 이제 만들어 볼까나 ^^ -- 이슈 : Tasklet에서 조건이 맞지 않을 경우 다음 스텝을 중지 해야 하는데... execute의 return 타입이 FINISHED와 CONTINUE 밖에 없다.. 해결 방법 : Exeception 던진다. 참고 :   http://forum.springsource.org/showthread.php?66932-Tasklet-API-Change-ExitStatus-to-RepeatStatus

generic을 사용하는 Class에서 T의 객체 생성 하기.

참고 :  http://stackoverflow.com/questions/75175/create-instance-of-generic-type-in-java From  Java Tutorial - Restrictions on Generics : Cannot Create Instances of Type Parameters You cannot create an instance of a type parameter. For example, the following code causes a compile-time error: public static < E > void append ( List < E > list ) { E elem = new E (); // compile-time error list . add ( elem ); } As a workaround, you can create an object of a type parameter through reflection: public static < E > void append ( List < E > list , Class < E > cls ) throws Exception { E elem = cls . newInstance (); // OK list . add ( elem ); } You can invoke the append method as follows: List < String > ls = new ArrayList <>(); append ( ls , String . class );

[javascript]Window 객체

Document 객체는 html 문서를 나타내며, Window 객체는 브라우저 창을 나타낸다. 중요성을 굳이 따지면 Window 더욱 중요하게 생각하여한다. Window객체는 프로그래밍시 전역 객체 역할을 하기 때문이다. 예를들면  var test = 42; 아래의 문법과 동일하다.  window.test = 42;

database 설계 시 주의사항

1. pk 순서를 where clause에서 사용하는대로 잡자. ...작업을 한다면 where clause 맞추는게 나을것 같다. 2. 어떤 조건으로 결과 셋을 줄여 나갈지 확인하자. 큰 범위의 결과는 되도록 뒤에 두자. 3. 식별자 관계 - 부모 pk를 자식의 pk 속성이 되는 관계 비식별자 관계는 부모 pk가 자식 pk의 속성이 아닌경우 식별자 관계시 자식 테이블을 대상으로 하는 query식이 점점 늘어난다. 비 식별자 관계일 경우 join문이 복잡하게 쓰일 수 있다. 이력테이블 관리. 이력테이블은 시간의 따라 레코드가 증가하는 테이블. 레코드가 많을 경우 처리시간이 오래 걸리는 특징이 있다. 관리 방법은 기본이 되는 그냥 한 테이블로 관리하는 방법과 마지막 상태를 저장하는 테이블과 이력테이블을 한쌍으로 관리 하는 방법이 있다. 주의 할점은...역시나 인덱스를 타느냐 마느냐. 적은 범위의 인덱스를 태울수 있는가에 대한 방법이다. 테이블 분리와 통합 통합된다면 너무 많음 트랜젝션이 몰릴 수 있는가? 없는가? 제약사항 조건을 거는데 문제가 있는가 고려할 것 분리된다면 조인에 의한 개발 및 성능에 영향과 테이블 관계의 복잡도을 고려 가장 명확한 구분 방법은 논리적 구조 판단 ㅡㅡ;;;; pk를 잡는이유는 테이블의 특성과 fk로 활용할 경우 무결성이 보장 되기 때문이다.

Spring Batch (6) - Test & Debug

이슈 사항  - 특정 폴더 내의 파일을 읽어 들여야 한다.  : MultiResourceItemReader을 이용하여 문제 사항 처리    (단 MultiResourceItemReader에 delegate할 Reader는 ResourceAwareItemReaderItemStream를 implement 해야한다.    이번 경우는 직접 Reader를 구현하였기 때문에 implement에 ResourceAwareItemReaderItemStream를 추가 하였음     - DB 조회 하여 조회 된 결과가 있으면 입력 값을 수정 하여야 한다.  : 해당이슈는 Processor에서 DB를 조회(Mybatis 이용)해야하는데 org.springframework.dao.TransientDataAccessResourceException: Cannot change the ExecutorType when there is an existing transaction 위와 같은 오류가 발생 Transaction문제로 판단되어서 org.mybatis.spring.SqlSessionFactoryBean에 대한 Bean을 추가 등록하여 Processor에서 조회하는 DAO에 적용 하니 문제가 해결되었음 (이번 케이스는 readOnly이고 조회 밖에 안하니깐 트랜젝션의 Propagation는 상관 없음..그러나 insert를 한다면 =_=; Writer를 써야 할듯) - Writer 이슈 : affected row가 반드시 있어야 한다. : batch 재 시작시 처음 부터 다시 시작한다는 정책 변경으로 batch repository를 mysql에서 내부 db로 변경 하였다. 그로 인해 중복된 데이터의 insert를 막기 위해 해당 테이블에는 unique key가 설정 하였다.(뭐 그게 아니더라도 당연히 했어야 하지만) 그래서 writer에서 사용하는 insert...