일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 코테
- 업로드 파일 용량
- application.properties
- 660mbt
- query
- @value
- 직렬화
- 개햄문자치환
- 롤백
- Serializable
- value 어노테이션
- 자바
- mysql
- spring
- 쿼리
- springboot
- java
- 트랜잭션
- 개행문자
- Spring Framework
- Object-oriented
- Docker
- 개발환경
- vue.js
- springframework
- sql
- 다중DB
- 레오폴드
- spring boot
- 줄바꿈
Archives
- Today
- Total
supremest.35 개발 블로그
[Spring Boot] @Value 어노테이션이 값을 못 가져온다. 본문
@Value 어노테이션을 이용해서 테스트 환경에서와 실서비스 환경에서 메일 전송 문구를 다르게 하려고 했다.
환경변수 env 값은 dev, prod 로 나눴다.
dev 에서는 '테스트'라는 문구를 추가하고 prod에는 사용자가 등록한 폼을 그대로 전송했다.
메일 전송 로직을 구현한 뒤 해당 클래스에 @Component 어노테이션을 붙였다.
메일 전송 메소드(test()메소드)를 컨트롤러에서 실행했다.
환경변수 env값이 local이었기에 로그에 local라는 값이 찍혀야하지만 null값이 찍혔다.
구글링 결과 이유를 찾았다.
문제는 컨트롤러에서 test()메서드를 실행하기 전 testComponent객체를 생성하는 과정에서 문제가 발생했다.
스프링 빈 객체는 기본적으로 싱글톤으로 생성된다.
TestComponent 객체의 경우 @Component 어노테이션을 통해 인스턴스화 되어 스프링 빈으로 등록되었다.
빈으로 등록된 TestComponent객체는 등록될 때 @Value() 안에 값이 들어간 상태로 객체가 만들어진다.
컨트롤러에서 이미 스프링 빈으로 등록된 TestComponent 객체가 아닌 new 키워드를 통해 새로 생성된 객체를 사용했기 때문에 @Value로 불러온 환경설정 값이 null이 되었다.
컨트롤러에서 생성한 객체는 스프링 빈으로 등록되지 않았기 때문에 @Value어노테이션이 작동하지 않았다!
컨트롤러를 다음과 같이 변경하니 @Value의 값을 정상적으로 불러왔다.
참고문서
'Study > Spring Framework' 카테고리의 다른 글
[Spring Boot] 의존성 주입 (0) | 2023.03.07 |
---|---|
[Spring Boot] 개발 환경에 따라 설정값 세팅하기 (0) | 2022.05.26 |
[Spring] 인터셉터(Interceptor)로 모든 요청 특정 페이지로 이동 시키기 (0) | 2022.01.25 |