inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 배치

JobLauncher

job launcher 캐스팅 문제 질문

308

이준혁

작성한 질문수 3

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

안녕하세요! simpleJobLauncher 캐스팅 관련해서 궁금한게 있습니다.
SimpleJobLauncher simpleJobLauncher = (SimpleJobLauncher) basicBatchConfigurer.getJobLauncher();

이렇게 캐스팅을 하는 이유는 jobLauncher에서 직접적으로 캐스팅을 할 수 없는 문제가 있어서 한다고 배웠습니다.

확인해보니 JobLauncher는 jdk dynamic proxy로 생성되어져있는데 cglib가 아닌 특별한 이유가 있을까요?

 

 

spring-boot spring-batch

답변 1

2

정수원

JobLauncher 인터페이스 타입으로 빈을 설정하는 클래스인 SimpleBatchConfiguration 을 보면 다음과 같은 구문이 나옵니다. 

@Override
@Bean
public JobLauncher jobLauncher() throws Exception {
return createLazyProxy(jobLauncher, JobLauncher.class);
}

.....
......


private <T> T createLazyProxy(AtomicReference<T> reference, Class<T> type) {
ProxyFactory factory =
new ProxyFactory();
factory.setTargetSource(new ReferenceTargetSource<>(reference));
factory.addAdvice(new PassthruAdvice());
factory.setInterfaces(new Class<?>[] { type });
@SuppressWarnings("unchecked")
T proxy = (T) factory.getProxy();
return proxy;
}

보시면 JobLauncher 타입의 프록시 객체를 만들고 있는데  ProxyFactory 클래스를 보면 cglib 가 실행되도록 강제하는 proxyTargetClass = true 와 같은 설정을 별도로 하지 않고 있습니다.

즉 인터페이스 타입으로 프록시 객체를 생성하고 있기 때문에 jdk dynamic proxy 가 실행되고 있습니다.

참고로 스프링 부트는 기본적으로 cglib 방식으로 프록시를 생성하고 있지만 위와 같이 별도로 프록시를 생성하는 경우에는 우선적으로 설정을 따르고 있습니다.

스프링 배치 버전 질문

0

141

1

소스코드가 어디에 있나요?

0

122

2

트랜잭션 예외

0

101

1

질문이 있습니다.

0

141

2

ChunkListener 에서 beforeChunk 의 실행 시점 관련 질문

0

146

2

여러 JOB 설정하는법

0

158

2

강의 자료 다른 방법 있을까요?

0

163

1

JobExecution과 JobExecutionContext와의 관계

0

199

2

특정 job만 실행

1

271

1

Batch 성능 질문

0

158

1

ItemReaderAdapter 종료

0

87

1

[ 강좌 Git 브랜치 문의 ] 섹션 9 > JdbcCursorItemReader, JpaCursorItemReader

0

191

2

Spring Batch 배포 질문

0

255

2

spring batch 버전

0

239

2

retry count 관련 질문

0

185

2

StepExecutionListener 의 afterStep 에서 return ExitStatus.FAILED 에 의한 동작에 의문이 갑니다.

0

346

2

jdbc, jpa 커서방식 조회 방식 차이 질문 (강사님께 답변 받고 싶습니다)

0

242

2

Multithread step과 AsyncItemProcessor

0

208

2

job 재실행

0

259

2

bean 생명주기 문제 도와주세요(@Scope("step"), @Autowired)

0

192

1

Multi-threaded-step과 Partitioning 차이 확인

0

187

2

jdbcCursorReader, jdbcPagingReader 질문

0

149

1

step muti-thread 질문

0

114

1

itemSteam open update close 질문

0

120

1