일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- SBT
- Storm
- hadoop
- elasticsearch
- Spring XD
- hibernate
- spark
- elastic search
- docker
- Linux
- apache storm
- Domain Driven Design
- scala
- 제주
- Java
- nginx
- intellij
- Clean Code
- Angular2
- 엘라스틱서치
- Hbase
- Spring Boot
- Spring Batch
- Gradle
- 스프링 배치
- Spring
- hdfs
- DDD
- design pattern
- 도메인주도설계
- Today
- Total
목록Programming (135)
욱'S 노트
JobLauncher 정의하기 JobLauncher의 가장 기본적인 구현체는 SimpleJobLauncher이다. 실행을 획득하기 위해 JobRepository에만 의존성을 가진다. JobExecution을 획득하면 Job의 execute 메소드로 전달된다. 이러한 과정은 스케쥴러로부터 구동되어 잘 수행되었을 경우이다. 하지만 Http 요청으로부터 작업이 구동될 경우에는 SimpleJobLauncher는 비동기로 작업을 수행하고 결과는 요청 즉시 클라이언트로 전달할 필요가 있다. 배치와 같은 많은 시간 수행되는 처리동안 HTTP 요청을 유지하는 것은 좋은 방식이 아니기 때문이다. 이러한 경우에 JobLauncher의 정의는 다음과 같이 표현된다. Running a Job 최소한 배치 작업을 구동하기 위해..
JobRepository 구성하기 JobRepository는 spring batch의 jobExecution과 stepExecution과 같은 domain 오브젝트를 저장하기 위한 CRUD 기능을 위해 사용된다고 언급했다.JobRepository는 JobLauncher, Job, Step과 같이 프레임워크는 주요한 특징이다. Transaction Configuration for the JobRepository 네임스페이스를 이용하면, transaction 어드바이스는 repository에 자동적으로 적용된다. 실패후 재시작되었을 때 상태를 포함한 메타데이터를 정확하게 하기 위함이다.작업이 구동되었을 때 create 작업을 수행하는 메소드에 대한 isolation level은 기본적으로 SERIALIZAB..
Job은 step의 단순한 컨테이너처럼 보이는 반면에 개발자들이 반드시 알아야 할 많은 옵션들이 있다.또한 작업을 어떻게 실행되는지 실행시 메타데이터가 어떻게 저장되는지에 대한 고려도 필요하다.이번에는 job에 관련된 다양한 옵션과 실행시 고려사항에 대해서 설명한다. 작업 정의하기 Job 인터페이스에는 다양한 구현체들이 존재한다. 그러나 네임스페이스 추상화를 통해 정의의 차이점을 없애준다.작업을 정의하기 위해서 단 세가지의 필수 요소(이름, jobRepository, step들)만이 필요하다.다음 예제는 parent 정의를 사용하여 step들을 생성하기 위한 예제이다.job-repository는 필수요소이지만, 암묵적으로 명시하지 않으면 jobReposity라는 id를 가진 빈을 참조한다. Restart..
아래 그림은 배치의 도메인을 가장 중요한 개념들만 나열한 것이다.Job은 다양한 Step으로 구성되며, 하나의 ItemReader, ItemProcessor 및 ItemWriter를 가진다.Job에 대한 수행 및 메타데이터를 관리하기 위해 JobLauncher와 JobRepository과 필요하다. Job 스프링 배치에서 job이란 step을 위한 컨테이너이다. job는 플로우에 논리적으로 함께 위치한 다수의 step으로 구성된다.재시작과 같은 모든 step에 공통적인 프로퍼티 설정을 적용할 수 있다. job 정의는 다음을 포함한다. - 작업의 이름- 스텝의 정의 및 순서- 작업의 재시작 가능 여부 스프링에서 제공하는 job 인터페이스의 가장 단순한 구현체로서 가장 표준적인 기능으로 SimpleJob 클..
스프링 배치 소개 엔터프라이즈 환경에서는 많은 어플리케이션은 미션 크리티컬한 비즈니스 수행을 위한 bulk 처리를 요구한다. 대용량 데이터의 자동화되고 복잡한 비즈니스 수행은 유저 상호작용 없는 처리되는 것이 매우 효율적이다. 이러한 작업은 시간 기반의 이벤트(월말 결산, 공지 및 보고), 복잡한 비즈니스 룰을 주기적으로 수행하는 작업(보험 이율 결산, 이율 조정) 또는 내부/외부 시스템으로의 대량 데이터의 송수신 등을 목적으로 한다. 배치 처리는 엔터프라이즈 환경에서 매일 수백만건의 트랜잭션의 처리를 수행한다. 스프링 배치는 엔터프라이즈 시스템에서 강력한 배치 어플리케이션을 개발할 수 있게 디자인된 가볍고 이해하기 쉬운 배치 프레임워크 이다. 스프링 배치는 POJO 기반의 생산성이 뛰어나며 스프링 프레..
오늘은 스프링 배치를 처음으로 알아보도록 하겠다. 흠 요즘 일은 안하고 너무 리서치만 하는게 아닌가 싶다. 근데 지금이 딱 좋은게 아닐까 스킬업을 하기엔..ㅋ 일단 다음과 같이 pom파일을 만들어 보자. 아래와 같은 디펜던시를 가지고 진행을 하겠다. 4.0.0 org.springframework spring-batch-test 0.1.0-SNAPSHOT 1.6 4.0.5.RELEASE 3.0.2.RELEASE 4.11 org.springframework spring-oxm ${spring.version} org.springframework.batch spring-batch-core ${spring.batch.version} org.springframework.batch spring-batch-infras..
무작정 따라해보자, 필드를 만드는 방법도 무진장 쉽다. clazz에 field 메소드를 통해서 생성이 가능하다. File rootDir = new File(outputConfig.getRootDirectory()); JCodeModel codeModel = new JCodeModel(); try { JDefinedClass clazz = codeModel._class(outputConfig.getClassName()); clazz.field(JMod.PRIVATE, String.class, "name"); clazz.field(JMod.PRIVATE, int.class, "age"); clazz.field(JMod.PRIVATE, ArrayList.class, "test"); codeModel.build..
JCodeModel은 쉽게 클래스 소스를 생성할 수 있게 도와준다.아래와 같이 단 3줄의 코딩으로도 간단하게 클래스 소스를 생성할 수 있다. 무작정 따라해보자. @Test public void testCreateClass() throws JClassAlreadyExistsException, IOException { JCodeModel codeModel = new JCodeModel(); codeModel._class("net.daum.domaingen.TestClass"); codeModel.build(new File("/Users/devsun/dev/projects/domain-generator/src/test/java")); } 생성된 소스는 다음과 같다. package net.daum.domaing..
sudo 명령어는 유닉스 및 유닉스 계열 운영 체제에서 다른 사용자의 보안권한과 관련된 프로그램을 구동할 수 있게 해주는 프로그램이다. 이것은 substitute user do (다른 사용자의 권한으로 명령을 이행하라, 는 뜻이다.) 의 줄임말이다. 기본적으로 Sudo는 사용자 비밀번호를 요구하지만 루트 비밀번호(root password)가 필요할 수 도 있고, 한 터미널에 한번만 입력하고 그 다음부터는 비밀번호가 필요 없다.[2]Sudo는 각 명령줄에 사용할 수 있으며 일부 상황에서는 관리자 권한을 위한 슈퍼유저 로그인(superuser login)을 완벽히 대신하며, 주로 우분투 리눅스와 애플의 맥 오에스 텐 에서 볼 수 있다.[3][4]이 프로그램을 처음 쓴 사람은 Bob Coggeshall 과 C..
append, count, delete, deleteall, get 로우나 테이블 내용을 가지고 온다. 테이블명, 로우 그리고 선택적으로 컬럼 목록, timestamp, timerange 와 버젼을 전달할 수 있다. Examples: hbase> get 'ns1:t1', 'r1' hbase> get 't1', 'r1' hbase> get 't1', 'r1', {TIMERANGE => [ts1, ts2]} hbase> get 't1', 'r1', {COLUMN => 'c1'} hbase> get 't1', 'r1', {COLUMN => ['c1', 'c2', 'c3']} hbase> get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => ts1} hbase> get 't1', '..