입사하자마자 Spring Batch로 이용하여 멀티데이터베이스를 제어하는 코드를 짰다. 바로 본론으로 들어가보자. 1.resources/application.yml 생성 datasource: DB 종류 이름1: first: jdbc-url: 첫번째 DB 주소 username: 아이디 password: 비밀번호 driver-class-name: 첫번째 클래스 이름 DB 종류 이름2: jdbc-url: 두번째 DB 주소 password: 비밀번호 username: 아이디 driver-class-name: 두번째 클래스 이름 -datasource 부분에서 DB 종류이름으로 나누어서 인식한다. -추후 first,second,third… 로 확장 가능하다. 2.각각 해당하는 DB Connect 담당 디텍토리 및 ..
참조:https://oingdaddy.tistory.com/183 [Spring Batch] Skip/Retry Simple Example (Springboot based) Spring Batch의 기본적인 기능들을 지난 포스팅들을 통해 알아보았다. 이번에 알아볼 Skip/Retry도 Spring Batch에서는 기본적으로 제공을 하는 기능이다. 간단한 예제를 통해서 알아보자. us-500.csv (웹에 oingdaddy.tistory.com Skip @Bean @JobScope public Step savePersonStep(@Value("#{jobParameters[allow_duplicate]}") String allowDuplicate) throws Exception { return this.st..
참조:https://oingdaddy.tistory.com/180 [Spring Batch] Listener Example (Springboot based) 지난 글에서 다뤘던 Springboot Batch Chunk Example에서 소스들을 살펴 볼때 Listener도 살짝 나왔다. 우리가 정의한 Job이나 Step 실행 전 후로 필요한 공통 작업을 기술하기 위해 주로 사용되며 사용된다. oingdaddy.tistory.com 실제로 스프링 배치에서는 거의 모든 측면에서 생명주기가 잘 정의되있다. 이를 바탕으로 스프링 배치는 생명 주기의 여러 시점에 로직을 추가할 수 있는 기능을 제공한다. 잡 실행과 관련이 있다면 JobExecutionListener를 사용할 수 있다. 이 인터페이스는 beforeJ..
ItemReader Interface 배치 대상 데이터를 읽기 위한 설정 파일,DB,네트워크, 등에서 읽기 위함 Step에 ItemReader는 필수 기본 제공되는 ItemReader 구현체 file,jdbc,jpa,hibernate,kafka,etc... ItemReader 구현체가 없으면 직접 개발 ItemStreamd은 ExecutionContext로 read,write 정보를 저장 FlatFileItemReader DB가 아닌 파일 형식으로 된 데이터를 읽어올 수 있도록 구현된 구현체이다. 한번 read 할 때 지정된 resource의 한 라인씩 읽어들인다. JDBC 데이터 읽기 Cursor 기반 조회 배치 처리가 완료될 때까지 DB Connection이 연결 DB Connection 빈도가 낮아..
@Scope는 어떤 시점에 bean을 생성/소멸 시킬 지 bean의 lifecycle을 설정 @JobScope는 job 실행 시점에 생성/소멸 Step 선언 @StepScope는 step 실행 시점에 생성/소멸 Tasklet,Chunk(ItemReader,ItemProcessor,ItemWriter)에 선언 Spring의 @Scope과 같은 것 @Scope("job") == @JobScope @Scope("step") == @StepScope Job과 Step 라이프사이클에 의해 생성되기 때문에 Thread safe하게 작동 @Value("#{jobParameters[key]}")를 사용하기 위해 @JobScope와 @StepScope 필수
배치를 처리할 수 있는 방법은 크게 2가지가 된다. Tasklet을 사용한 Task기반 처리 배치 처리 과정이 비교적 쉬운 경우 쉽게 사용 대량 처리를 하는 경우 더욱 복잡 하나의 큰 덩어리를 여러 덩어리로 나누어 처리하기 부적합 @Bean public Step shareStep2() { return stepBuilderFactory.get("shareStep2") .tasklet((contribution, chunkContext) -> { StepExecution stepExecution = contribution.getStepExecution(); ExecutionContext stepExecutionContext = stepExecution.getExecutionContext(); JobExecut..
출처:https://cheese10yun.github.io/spring-batch-basic/ 스프링 부트 배치의 장점 대용량 데이터 처리에 최적화되어 고성능을 발휘한다. 효과적인 로깅,통계처리,트랜잭션 관리 등 재사용 가능한 필수 기능을 지원한다. 수동으로 처리하지 않도록 자동화되어 있다. 예외사항과 비정상 동작에 대한 방어 기능이 있다. 스프링 부트 배치는 반복적인 작업 프로세스를 이해하면 비즈니스로직에 집중할 수 있다. 스프링 부트 배치 주의사항 스프링 부트 배치는 스프링 배치를 간편하게 사용 할 수 있게 래핑한 프로젝트 입니다. 따라서 스프링 부트 배치와 스프링 배치에 모두에서 다음과 같은 주의사항을 염두해야 한다. 가능하면 단순화해서 복잡한 구조와 로직을 피해야한다. 데이터를 직접 사용하는 편이..
참조:https://advenoh.tistory.com/51 Quartz Job Scheduler란? Gatsby로 블로그 마이그레이션을 하여 이 링크를 클릭하면 해당 포스팅으로 갑니다. 감사합니다. http://blog.advenoh.pe.kr 1. 들어가며 Quartz Job Scheduler에 대한 내용은 여러 시리즈 형식으로 작성을 하 advenoh.tistory.com Quartz란? Job Scheduling 라이브러리로 완전히 자바로 개발되어 자바 프로그램에서도 쉽게 통합해서 개발할 수 있다. Quartz는 수십에서 수천 개의 작업도 실행 가능하며 간단한 interval 형식이나 Cron 표현식으로 복잡한 스케줄링도 지원한다.예를 들면 매주 금요일 새벽 1시 30분에 매주 실행하는 작업이나 ..
보호되어 있는 글입니다.
