티스토리 뷰

 application.yml 파일에 설정값을 입력하고 @Value 를 통해 데이터를 가져오는 방식에서, 값을 제대로 설정하였음에도 Null 값을 불러오는 경우가 종종 있습니다. 그럴 땐 @Value 를 작성한 Service 를 new 로 호출하지 않았는지 확인할 필요가 있습니다.

 기본적으로 Spring 은 DI 컨테이너가 @Autowired 나 @RequiredArgsConstructor 를 통해 인스턴스를 싱글톤으로 유지합니다. Spring 이 실행될 때, @Value 값이 맵핑된 상태로 인스턴스가 유지가 되던중 new 를 만나게 되면 새로운 인스턴스를 생성해 @Value 값이 맵핑된 변수는 Null 이 됩니다. 

# application.yml

spring:
  file:
    profile-path: file:///D:/profile/
# FileService.java

@Service
public class FileService {

	@Value("${spring.file.profile-path}")
  	private String profilePath;
    
    ...
    
}
# Controller.java

@RestController
@RequiredArgsConstructor
public class Controller {
	
  // 또는 @Autowired
  private final FileService fileService;
    
  // X
  private FileService fileService = new FileSerice();
}

@RequiredArgsConstructor 또는 @Autowired 로 자동 주입을 받아야 인스턴스가 유지되어 @Value 로 지정한 상수값이 유지될 것 입니다.

최근에 올라온 글
Total
Today
Yesterday