spring batch 를 이용하면 JobBuilderFactory, StepBuilderFactory 를 이용해 코드를 작성하게 된다. 이때 factory 가 제공해주는 다양한 속성들이 있는데, 나같은 경우 자동완성으로 뜨긴뜨는데 뭐하는건지 명확히 모르고 그냥 사용하던 것만 사용하고 있었다. 이것들을 한번 정리해본다. preventRestart spring batch 는 job name 과 job parameters 를 이용해 job 인스턴스를 식별한다. job 이 실패했을경우 동일한 식별정보로 job 실행요청이 들어오면 실패한 step 부터 job 을 실행하게되는데 preventRestart 가 설정되어있으면 예외를 일으켜 잡이 다시 실행되는걸 막는다. allowStartIfComplete A job..

이전에 spring cloud config server/client 를 설정하는 포스팅을 올렸었다. ( multifrontgarden.tistory.com/236 multifrontgarden.tistory.com/237 ) server 를 설정하는 부분은 달라진게 없는데 spring boot 2.4 로 올라오면서 client 설정 부분이 좀 달라졌다. 이를 알아보자. 1. spring boot 2.4 방식 사용 먼저 2.4 이전에는 client 에 bootstrap.yml(또는 properties) 파일이 필요했다. 그래서 서버 정보를 입력해두면 라이프사이클 상 application.yml 보다 bootstrap.yml 을 먼저 읽어 config server 에 정의돼있는 프로퍼티들을 읽어보게끔 했었다..
spring boot 2.4 버전부터 애플리케이션 설정 파일( application.properties, application.yml, application.yaml ) 에 대한 구동방식이 변경됐다. 변경된 이유는 k8s 볼륨 마운트 구성때문이라고 하는데 이것에 대해선 논하지 않는다. 설정파일에 대해 어떤것들이 변경됐고, 어떻게 마이그레이션해야하는지 알아보자. # 설정이 단순한 경우 애플리케이션 설정파일을 멀티 모듈로 구성하거나 profile 별로 분리해놓지 않았다면 크게 신경 쓸 필요 없이 그대로 구동하면 된다. # 설정이 분리되어 있는 경우 엔터프라이즈 환경에서 규모있는 애플리케이션을 구성한다면 위처럼 설정 파일이 단일로 있지는 않을 것이다. 멀티모듈로 구성되어있다면 애플리케이션 설정 파일에서 추가적..
# ThreadPoolExecutorjava 에서 멀티스레드 프로그램을 구현시 자바 1.5 에 추가된 concurrent 패키지를 많이 이용하게 된다.concurrent 패키지에 있는 ThreadPoolExecutor 는 Thread 를 직접 생성하고, 관리하는 부분을 추상화하여 작업(task)과 실행(execute)을 분리시켜준다. ThreadPoolExecutor 는 Executors 에 있는 팩토리 메서드를 이용해 간편하게 생성할 수도 있고, 직접 생성자를 호출해서 객체를 생성할 수도 있다.Executors.newCachedThreadPool(); Executors.newFixedThreadPool(10); Executors.newSingleThreadExecutor(); ..
자바에는 UncaughtExceptionHandler 라는 인터페이스가 있다. 생소한 인터페이스일텐데 jdk 1.5 에 추가된 인터페이스이다. Thread 클래스의 내부 인터페이스로 선언되어있는데, 위치만 봐도 알 수 있듯이 쓰레드에 관련한 인터페이스이다. 쓰레드가 동작할때 내부에서 발생한 예외를 처리하지 않을 경우 UncaughtExceptionHandler 인터페이스의 구현체에서 예외를 처리할 수 있다. @FunctionalInterface public interface UncaughtExceptionHandler { /** * Method invoked when the given thread terminates due to the * given uncaught exception. * Any exce..
spring batch 에서 Step 라이프사이클을 활용해 step 이 실행되기전 선작업이 필요한 경우 2가지 방법이 있다. StepExecutionListener 인터페이스를 구현하는 방법과 @BeforeStep 애노테이션을 이용해 선언적으로 명시하는 방법이다. - StepExecutionListener 인터페이스를 구현하는 방식(인터페이스의 추상메서드들을 기본으로 구현해주는 스켈레톤 클래스인 StepExecutionListenerSupport 를 상속받았다.) class SampleTasklet : Tasklet, StepExecutionListenerSupport() { override fun execute(contribution: StepContribution, chunkContext: Chunk..
얼마전 코틀린 1.4 버전이 릴리즈됐다. 추가된 기능들에 대해 간략히 살펴보자. # SAM conversions for Kotlin interfaces 지금까지 코틀린은 SAM(Single Abstract Method, 추상메서드가 하나뿐인 인터페이스) 에 대해 람다 표현식을 지원하지않았다. 함수 자체를 타입으로 나타낼 수 있었기때문에 함수 타입에만 람다를 지원하고, 자바의 함수형 인터페이스(마찬가지로 추상메서드가 1개인 인터페이스)만 람다로 표현할 수 있었다. fun main() { val calculator = object: Calculator { override fun add(n1: Int, n2: Int): Int = n1 + n2 } } interface Calculator { fun add(n..
처음 자바를 배울때만해도 getter, setter 는 객체지향 언어인 java 의 캡슐화의 산물이었다. 하지만 개발자로써 경험을 하고, 공부해오면서 getter, setter 로는 충분한 캡슐화를 제공하기 어렵고, 특히 setter 는 캡슐화를 넘어 객체 상태를 변경하기때문에 더 주의깊게 사용하고자 하고있다. 객체를 조작하고, 코드를 작성하다보면 객체의 상태를 변경해야하는 경우도 발생하는데 이럴때도 단순히 setter 를 호출하기보다는 좀 더 의미있는 이름의 메서드를 제공하고자했고, 특히 2개 이상의 상태를 변경해야한다면 클라이언트 코드에서 연속적인 setter 를 호출하는것 보다는 필요한 상태를 모두 원자적으로 변경하는 메서드를 제공하는 형태의 코드를 작성하고있다. - setter 를 이용한 상태 변..

spring batch 에서는 batch 메타 테이블을 이용해 배치 잡의 메타 데이터들을 관리해준다. job 의 실행 이력, 들어온 job parameters, 실행 결과 등을 말이다. 이 메타 테이블에 있는 정보를 이용해 spring batch 는 이전에 실행 이력이 있는 파라미터로 job 요청이 들어오면 job 실행을 중단할 수 있다. 하지만 이런식으로 job 실행을 막는건 여러모로 불편할때가 있다. 그래서 이를 무력화 하기위해 spring batch 는 기본 job parameters 에 유니크한 파라미터를 추가해주는 JobParametersIncrementer 라는 인터페이스를 제공한다. 그리고 이 인터페이스의 구현체인 RunIdIncrementer 클래스를 제공하고있다. https://githu..
1. 이슈와 해결 레거시 코드가 있는 상태에서 기존 코드의 동작을 확장시키는 코드를 만들일이 있었다. 한 문장이지만 표현이 거창해서 그렇지 사실 대부분의 개발은 첫 문장과 같은 형태가 될것이다. 기존 코드를 어떤방식으로 확장하면 좋을까를 고민하다가 상속과 오버라이딩을 이용하기로 했다. 간략화된 코드는 아래와 같다. @Service @RequiredArgsConstructor class AService { private final BService bService; @Transactional void aMethod() { bService.bMethod1(); bService.bMethod2(); } } @Service class BService { @Transactional void bMethod1() { ..
- Total
- Today
- Yesterday
- clean code
- DesignPattern
- backend개발환경
- EffectiveJava
- JavaScript Core
- http
- JPA
- frontend개발환경
- TEST
- Jackson
- spring cloud
- Kotlin
- servlet
- java8
- code
- 정규표현식
- programming
- frontcode
- db
- MySQL
- javascript
- generics
- OOP
- Git
- mariadb
- toby
- Spring
- Design Pattern
- go-core
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |