티스토리 뷰
문제
배포 환경과 개발 환경이 달라짐에 따라 기존에 개발 환경에서만 사용하던 URL들을 환경변수로 꺼내서 개발, 배포 환경에 따라 다르게 값이 들어가야 했다.
application.properties에 url을 꺼내 @Value("${host.url}")로 선언하고 사용하는 방법으로 사용하고자 결정했고 그대로 구현하였으나 아래와 같은 에러가 발생하며 프로젝트가 빌드되지 않는 문제가 발생했다.
Parameter 0 of constructor in required a bean of type 'java.lang.String' that could not be found
@Service
@Transactional
@AllArgsConstructor
public class ItemService {
@Value("${host.url}")
private String url;
원인
원인은 lombok의 @AllArgsConstructor였다.
생성자를 만든다는 것은 스프링부트 컨테이너에 거기에 들어오는 값을 사용하겠다고(DI) 선언하는 것이다.
하지만 @AllArgsConstructor는 롬복에 의해 생성되는데 이때 필드에 있는 모든 값을 전부 긁어와서 읽어버리는 문제가 발생한다.
즉 이것은 롬복은 annotation을 읽지 못 하므로 아직 선언되지도 않은 값을 가져와서 읽으려고 시도하게 되고 이에 따라서 생성자 오류가 발생하는 것이다.
해결
해결 방법은 다음과 같다.
@AllArgsConstructor를 @RequiredArgsConstructor로 바꾸어 사용한다.
@AllArgsConstructor는 애초에 모든 값을 읽으려고 시도하기 때문에 어떠한 상황에서도 사용하지 않는 편이 좋다.
@Service
@Transactional
//@AllArgsConstructor 사용하지 않는 것이 좋다.
@RequiredArgsConstructor
public class ItemService {
@Value("${host.url}")
private String url;
동작하는지 확인해본 코드는 아니나 아래와 같이 @Autowired 방식으로도 사용할 수 있다고 한다.
@Autowired
@Generated
public MyService(@Value("${my.config.value}") final String myField, final Object myDependency) {
this.myField = myField;
this.myDependency = myDependency;
}
레퍼런스
https://stackoverflow.com/questions/69798490/getting-null-value-for-value-with-allargsconstructor
'트러블슈팅' 카테고리의 다른 글
스프링부트와 프로메테우스 연동시 "INVALID" is not a valid start token가 발생할 경우 해결 방법 (0) | 2022.07.25 |
---|---|
Spring actuator 의존성 추가만으로 nullpointerexception가 발생할때 해결방법 (2) | 2022.07.25 |
젠킨스 SSH로 sh를 실행할때 경로에 주의하자 (0) | 2022.07.04 |
@Embeddable을 사용할때 NullPointerException을 방지하는 방법 (0) | 2022.06.04 |
The dependencies of some of the beans in the application context form a cycle: 에러 발생 해결 방법 (0) | 2022.06.02 |
- Total
- Today
- Yesterday
- RequestPart
- 도커
- vim
- JavaScript
- IDE
- neovim
- lunarvim
- 배포
- RequestParam
- ModelAttribute
- 루나빔
- RequestBody
- 아키텍처
- 레디스
- Dap
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |