Serializable interface Serializable.java public interface Serializable { } Person.java class Person implements Serializable { String name; String job; // transient String job; // transient : 이 멤버는 직렬화 대상에서 제외한다. (default 값 null 로 출력될거임) public Person() { } public Person(String name, String job) { this.name = name; this.job = job; } public String toString() { return name + "," + job; } } Serializ..
interface Comparable 매개변수를 1개 받는다. package java.lang; import java.util.*; public interface Comparable { /* ... */ public int compareTo(T o); } Comparable 구현하기 1) 오름차순 public class Member implements Comparable { ... public int compareTo(Member member) { /** 오름차순 출력 */ if (this.memberId > member.memberId) { return 1; } else if (this.memberId < member.memberId) { return -1; } else { return 0; } } }..
Todo. 가장 긴 문자열 추출하기 1. Stream 사용 public class ReduceTest { public static void main(String[] args) { String values[] = {"Hello", "World", "!"}; /* 가장 긴 length 문자열 추출 */ String reduce = Arrays.stream(values).reduce("", (s1, s2) -> { if (s1.getBytes().length >= s2.getBytes().length) { return s1; } else { return s2; } }); } } 2. Lamda 사용 class CompareString implements BinaryOperator { @Override publ..
이전 포스팅 (docker-compose 사용하지 않은 경우) https://devfunny.tistory.com/440 docker 에 rabbitMQ 설치하기 1) rqbbitmq 이미지 설치 docker pull rabbitmq:3-management 2) rabbitmq 컨테이너 실행 docker run -d -p 15672:15672 -p 5672:5672 --name msa-rabbitmq rabbitmq:3-management 3) 접속 확인 localhost:15672 I.. devfunny.tistory.com docker-compose 파일 생성 docker-compose.yml version: '3' services: rabbitmq: image: 'rabbitmq:3-manageme..
Function keyExtractor 선언 public class Test { private final Function keyExtractor; public Test(Function keyExtractor) { this.keyExtractor = keyExtractor; } ... } 호출 Test test = new Test(TestDto::getName) 람다식 전달 (TestDto::getName) 사용코드 public void testMethod(TestDto testDto) { /* 해당 item 으로 추출하겠다 */ String key = keyExtractor.apply(testDto); } name 을 key 값으로 추출될 것이다.
SpringBatch DB 개인 공부 프로젝트용으로 springBoot의 내장되어있는 h2 DB를 사용하면 편하겠지만, 스프링 배치 프로젝트 특성상 데이터가 영구적으로 쌓일 수 있는 Oracle, Mysql 등을 사용해야한다. 아래 포스팅을 참고하여 Docker 의 Mysql 을 설치하자. https://devfunny.tistory.com/421
읽어올 파일 1. customerMultiFormat.csv CUST,Warren,Q,Darrow,8272 4th Street,New York,IL,76091 TRANS,1165965,2011-01-22 00:13:29,51.43 CUST,Ann,V,Gates,9247 Infinite Loop Drive,Hollywood,NE,37612 CUST,Erica,I,Jobs,8875 Farnam Street,Aurora,IL,36314 TRANS,8116369,2011-01-21 20:40:52,-14.83 TRANS,8116369,2011-01-21 15:50:17,-45.45 TRANS,8116369,2011-01-21 16:52:46,-74.6 TRANS,8116369,2011-01-22 13:51:05..
전체 코드 보기 package com.seohae.batch.batch.fileBatch1.job; import com.seohae.batch.batch.fileBatch1.entity.Customer; import com.seohae.batch.batch.fileBatch1.mapper.CustomerFieldSetMapper; import com.seohae.batch.batch.fileBatch1.mapper.CustomerFileLineTokenizer; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.batch.core.Job; import org.springfram..
잡의 재시작 방지 스프링 배치의 모든 잡은 실패하거나 중지될 때 다시 실행할 수 있었다. 스프링 배치는 기본적으로 이렇게 동작하므로 우리는 다시 실행하면 안되는 잡이 있을시 재시작을 방지해야한다. preventRestart() preventRestart() 메서드를 호출하여 잡이 실패하거나 어떤 이유로 중지된 경우에도 다시 실행할 수 없다. /** * 잡 실행 * @return */ @Bean public Job transactionJob() { return this.jobBuilderFactory.get("transactionJob") .preventRestart() /* 잡은 기본적으로 재시작이 가능하도록 구성되어있다. 잡의 재시작 방지 */ .start(...) .next(...) .build();..
스텝 실행 중 오류 던지기 스프링 배치는 예외가 발생하면 기본적으로 스텝 및 잡이 실패한것으로 간주한다. 따라서 아래 예제처럼 throw Exception 에 의해 잡은 FAILED(실패) 상태로 중지된다. 스프링 배치는 잡이 중지되면 현재 청크를 롤백하고, 성공적으로 완료한 작업까지 커밋하고, 재시작 시에는 중단됐던 부분을 찾아낸다. private Transaction process(FieldSet fieldSet) { if(this.recordCount == 25) { throw new ParseException("This isn't what I hoped to happen"); } ... } 오류를 던짐으로써 해당 스텝은 ExitStatus.FAILED 상태로 스텝이 완료되지 않았다. 실제로 예외가..
StepExecution 스텝 중지 beforeStep 에서 StepExecution 을 가져온 다음, 이후 실행될 스텝에서 setTerminateOnly() 메서드를 사용한다. setTerminateOnly() 메서드를 호출하면, 스텝이 완료된 후 스프링 배치가 종료된다. 아래 예제처럼 if문의 조건에 충족하지 못할시 해당 스텝 완료 후 스프링 배치를 종료시킬 수 있다. public class TransactionReader implements ItemStreamReader { ... /** * afterStep 이 아닌 beforeStep 을 사용하도록 변경하여 StepExecution 을 가져온다. */ private StepExecution stepExecution; ... /* 스텝 빌드 전 s..
쿼츠 Quartz 쿼츠란, 오픈소스 스케줄러이다. 쿼츠는 자바 환경의 규모와 상관없이 사용이 가능하고 잡 실행에 유용한 스프링 부트 지원과 같이 오래전부터 스프링 연동을 지원하고있다. 쿼츠는 아래 3가지 컴포넌트를 제공한다. 1) 스케줄러 (Scheduler) : 스케줄러는 SchedulerFactory 를 통해서 가져올 수 있으며 JobDetails 및 트리거의 저장소 기능을 한다. 2) 잡 (Job) 3) 트리거 (Trigger) : 작업 실행 시점을 정의한다. : 트리거가 작동되어 쿼츠에게 잡을 실행하도록 지시하면, 잡의 개별 실행을 정의하는 JobDetails 객체가 생성된다. 스프링 배치 처리 쿼츠에서 잡과 JobDetails 객체를 정의하는 모델은 스프링 배치에서 잡과 JobInstance 를..