반응형
문제
멀티 데이터소스를 채택하면서, 메인 데이터소스는 @Primary를 붙였고, 배치 데이터소스는 @Qualifier를 사용해서 가져오려고 했었다. 하지만 lombok의 @RequiredArgsConstructor 사용 시 @Qualifier 사용이 불가능했던 문제가 있다.
@Slf4j
@Service
@RequiredArgsConstructor
public class TestService {
private final DataSource dataSource;
@Qualifier("batchDataSource")
private final DataSource batchDataSource;
// ...
}
TestService는 2개의 DataSource를 주입받고 있다.
@Service
public class TestService {
@Generated
private static final Logger log = LoggerFactory.getLogger(TestService.class);
private final DataSource dataSource;
@Qualifier("batchDataSource")
private final DataSource batchDataSource;
@Generated
// 여기 아래 !!!
public TestService(final DataSource dataSource, final DataSource batchDataSource) {
this.dataSource = dataSource;
this.batchDataSource = batchDataSource;
}
}
롬복이 만들어준 빌드된 코드를 보면 위와 같다.
필드를 보면 @Qualifier가 잘 적혀있는 것 같이 보이지만, 생성자에서는 @Qualifier가 없어서 주입을 못 받는다.
해결
// lombok.config
# 롬복 애노테이션 프로세서가 생성자 생성 시 사용할 필드에 선언된 @Qualifier를 복사
lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier
프로젝트 루트 디렉터리에 lombok.config 파일을 만들어서 위와 같이 작성해 주면 된다.
@Service
public class TestService {
@Generated
private static final Logger log = LoggerFactory.getLogger(TestService.class);
private final DataSource dataSource;
@Qualifier("batchDataSource")
private final DataSource batchDataSource;
@Generated
// 여기 아래 !!!
public TestService(final DataSource dataSource, @Qualifier("batchDataSource") final DataSource batchDataSource) {
this.dataSource = dataSource;
this.batchDataSource = batchDataSource;
}
// ...
}
이제 생성자의 인수에 @Qualifier가 잘 붙어있는 것을 볼 수 있다.
반응형
'TIL ✍️' 카테고리의 다른 글
TIL #120 : 멀티 데이터소스 환경에서 이중 커넥션 점유 막기 (1) | 2024.11.15 |
---|---|
TIL #119 : Jacoco 테스트 커버리지 항목에 롬복이 생성한 코드 무시하기 (0) | 2024.11.13 |
TIL #117 : 인텔리제이 프로젝트 구조의 하위 디렉토리 전부 펼치기 단축키 (0) | 2024.11.13 |
TIL #116 : 스프링/도커컴포즈에 Graceful shutdown 적용하기 (1) | 2024.11.13 |
TIL #115 : 자바에서 offset 있는 DateTime 파싱하기 (0) | 2024.11.13 |