olrlobt
[Spring boot] @Value 어노테이션으로 application.properties의 값 가져오기 본문
[Spring boot] @Value 어노테이션으로 application.properties의 값 가져오기
olrlobt 2023. 3. 27. 20:32@Value
Spring boot에서 제공하는 어노테이션 중 하나로, 빈(Bean) 생성 시점에 값을 주입하기 위해 사용된다.
주로 개발하면서 application.properties에 설정한 값들을 가져오기 위하여 사용되고,
개발하는 동안 변경이 자주 되는 경로와 같은 값들을 @Value로 가져와서 사용하기도 한다.
사용법
1. application.properties 작성
## 서버 포트
server.port=80
## 임의 경로 변수
ffmpeg.location=C:/ffmpeg/bin/ffmpeg.exe
ffprobe.location=C:/ffmpeg/bin/ffprobe.exe
## 임의 문자 변수
ffmpeg.text.hh=hi
Spring에서의 주요 설정, 파일경로와 같은 것들은 application.properties에서 위처럼 Key = Value 형식으로 관리된다.
나는 예시로 서버포트와 경로변수, 문자변수를 작성해 보았다.
2. Class에 Bean 주입
@Value는 앞서 설명한 바와 같이, 빈(Bean) 생성 시점에 값을 주입하기 위해서 사용된다. 따라서 사용할 Class에 Bean 주입은 필수 적이다.
Spring boot에서 Bean을 주입할 수 있는 대표적인 어노테이션은 다음과 같다.
- @Component: 스프링의 기본적인 빈 생성 어노테이션으로, 빈을 생성할 클래스에 붙인다.
- @Service: 비즈니스 로직이 포함된 클래스에 붙인다.
- @Repository: 데이터베이스와 관련된 작업을 수행하는 클래스에 붙인다.
이 외에도 @Controller, @RestController, @Configuration를 이용하여 주입할 수 있다.
또한 클래스 생성 시 new로 생성하게 될 경우, 스프링 컨테이너에서 관리되지 않기 때문에 @Value값이 지정되지 않는다. 따라서 @Autowired 어노테이션을 이용하여, 다른 Bean과의 의존성을 자동으로 주입해야 한다.
// 잘못된 선언 new
VideoFileUtils videoFileUtils = new VideoFileUtils();
videoFileUtils.media_player_time(file);
// 의존성 자동 주입
@Autowired
private VideoFileUtils videoFileUtils;
3. @Value로 변수 값 주입
@Value("${server.port}")
private String port;
@Value 어노테이션에서 값을 받아올 때는 위와 같이 사용한다.
application.properties에서 작성한 변수 부분을 "${}"로 감싸서 사용한다.
이때 주의할 사항은 static 변수에는 주입이 되지 않는다.
위 예시를 보면, 앞서 설정한 경로와 텍스트, 서버 포트가 잘 주입이 되어 있다.
하지만, ffprobePath의 경우 static으로 선언이 되어 있다.
이를 출력해 보면,
static으로 선언한 값을 제외하고는 정상적으로 출력되는 것을 확인할 수 있다.
@ConfigurationProperties
@ConfigurationProperties 어노테이션을 이용하면, application.properties 파일에서 정의한 속성값들을 자바 클래스에 매핑하여 사용할 수 있다.
application.properties
myapp.service.name=My Service
MyProperties.java
@Configuration
@ConfigurationProperties(prefix = "myapp")
public class MyProperties {
private String serviceName;
public String getServiceName() {
return serviceName;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
}
위와 같이 application.properties에 선언한 key의 prefix를
MyProperties 클래스에서 @ConfigurationProperties 어노테이션을 이용하여 매핑해 주고 있다.
따라서, getServiceName() 메서드를 호출하게 되면 application.properties에 정의한 값의 Value를 가져오게 된다.
결과
My Service
'Spring > Spring' 카테고리의 다른 글
[Spring] 스프링 컨테이너와 스프링 빈(Bean) 등록 (0) | 2023.05.25 |
---|