Programing/Spring Framework 13

Spring Batch - Parallel Processing

시작하기 전에 Spring Batch를 통해 배치 서비스를 개발을 할때 성능이 극대화할 필요가 있을수가 있다. Thread을 이용하여 Parallel Processing을 하는 방법에 대해 알아보자. Multi-threaded step @Bean public TaskExecutor taskExecutor(){ return new SimpleAsyncTaskExecutor("spring_batch"); } @Bean public Step sampleStep(TaskExecutor taskExecutor) { return this.stepBuilderFactory.get("sampleStep") .chunk(10) .reader(itemReader()) .writer(itemWriter()) .taskExe..

Spring Framework - Bean Scope

Singleton 스프링 컨테이너에 관리되는 빈의 기본 Scope 스프링 컨테이너에서 단 하나의 객체만 존재를 한다. Prototype Singleton 가 다르게 다수의 객체가 존재를 할수 있다. 스프링 컨테이너에서 Bean의 Life Cycle를 전부 관리를 하지 않는다. 즉 사용 Reference가 없는 GC에 의해 객체가 정리가 된다. Lifecylce에 의해 정의되는 종료 메서드가 호출이 되지 않는다. (@Predestory 등) Request Http Request 생명주기 안에 유효한 Bean, 즉 Web-aware Spring Application Context에서 유효하다. Session Http Session 생명주기 안에 유요한 Bean, Request와 동일하게 Web-aware A..

Spring Framework, IoC, DI

Spring Framework 엔터프라이즈급 애플리케이션을 만들기 위한 경량솔루션이며 많은 기능을 제공하며 자바 애플리케이션 개발을 위한 포괄적인 인프라스트럭쳐를 제공하는 자바 플랫폼이다. 스프링은 당신이 애플리케이션에 집중할 수 있도록 인프라스트럭쳐를 제공한다. IoC (Inversion of Control) - 제어의 역전 개발자가 객체 생성을 직접하지 않고 컨테이너 (Container)에서 객체 생성/소멸 등을 관리하는 방식 개발자가 직접 컨트롤 할 수 없고, 컨테이너가 (Container)관리를 하기 때문에 제어의 역전(Inversion of control)이라고 표현함. Spring에서 IoC Container인 ApplicationContext에서는 bean xml 또는 annotation을 ..

JdbcTemplate, RowCallbackHandler 이용하기

JdbcTemplate, RowCallbackHandler 이용하기리턴되는 결과값이 사이즈가 큰 경우에는 직접 ResultSet를 받아서 사용할수가 있다.ex) Hive에 리턴되는 값을 처리하는 프로세스 public class RowCallbackHandlerImpl implements RowCallbackHandler { public void processRow(ResultSet rs) throws SQLException { // do something with resultset }} jdbcTemplate.query(sql, values, new RowCallbackHandlerImpl);

Spring Retry

Spring RetryUse case내부서비스가 아닌 외부서비스와 연동메시지를 동시에 처리를 하면서 update시 생기는 낙관적인 락을 인한 로직의 실패메시지를 동시에 처리를 하면서 Insert시에 생기는 Duplicate 에러로 인한 로직의 실패Gradlecompile "org.springframework.retry:spring-retry:1.1.5.RELEASE" Enable Config@Configuration@EnableRetrypublic class AppConfig { ... } Retryable@Servicepublic interface MyService { @Retryable( value = { SQLException.class }, maxAttempts = 2, backoff = @Bac..

Spring 자체 인스턴스화 된 객체에 종속성을 주입하는 방법

Spring 자체 인스턴스화 된 객체에 종속성을 주입하는 방법private @Autowired AutowireCapableBeanFactory beanFactory; public void doStuff() { MyBean obj = new MyBean(); beanFactory.autowireBean(obj); // obj will now have its dependencies autowired.} AutowireCapableBeanFactory의 autowireBean을 이용하여 자체 인스턴스화 된 객체에 종속성을 주입을 할수가 있다. 직접 ApplicationContext를 접근해서 하는 방법 방법AutowireCapableBeanFactory factory = applicationContext.ge..

Spring Bean Life Cycle

Spring Bean Life Cycle Annotation을 이용하는 방법 @PostConstruct, @PreDestroy 를 이용하면 Bean이 생성될때 Bean 제거 될때의 Life Cycle에 코드를 실행을 할수가 있다. @Service public class MyService { @PostConstruct public void init(){ System.out.println("MyService init method called"); } @PreDestroy public void destory(){ System.out.println("MyService destroy method called"); } } InitializingBean, DisposableBean Interface를 이용하는 방법 ..

Spring @Transactional Propagation

Spring @Transactional PropagationSpring Framework에서 제공하는 트랙잭션의 기능인 전파에 대해 알아보자. 결제, 예약 등과 같이 트랙잭션을 세밀하게 컨트롤을 해야하는 서비스 반드시 알아야되는 내용 중이 하나이다. 어노테이션의 해당하는 옵션은 propagation 필드이다.REQUIREDTransaction이 없는 경우에는 새롭게 생성을 한다.Method 2가 실행이 되는 경우에는 Transaction이 생성된 것을 사용한다.REQUIRES_NEW새로운 Transaction을 생성을 한다.Tip (2018/11/27 추가)Transcation 1이 길어지는 경우가 발생이 될수도 있다 이럴 경우에는 Long Transaction이기 때문에 DB가 Restart가 될수가 ..

Spring Constructor Dependency Injection

Spring Constructor Dependency Injection생성자를 이용한 의존성 주입공통 로직을 가지고 있지만 멤버 변수가 다른 경우에 활용을 할수 있다.XML Config인 경우constructor-arg 를 이용하여 의존성 주입을 할수 있다.Java Config인 경우공통 로직은 Abstract Class로 구현을 하고 구현체는 그 클래스를 extend를 한다.필요한 데이터는 super 키워드를 이용하여 주입을 한다. @Componentpublic class Car { @Autowired public Car(Engine engine, Transmission transmission) { this.engine = engine; this.transmission = transmission; }}