- @configurationproperties 사용법 -
ConfigurationProperties
*.properties , *.yml 파일에 있는 property를 자바 클래스에 값을 가져와서(바인딩) 사용할 수 있게 해주는 어노테이션
Spring boot 에서는 운영에 필요한 설정(DB 정보, LOG설정 등등 )들을 *.properties , *.yml 에 써두고 관리한다.
이 설정은 KEY - VALUE 의 형태로 저장되어 관리하고 있으며 @Value 을 사용하여 바인딩을 할 수 있다.
아래와 같은 properties 파일이 있다고 가정할 때
site-url.naver=https://www.naver.com
site-url.google=https:/google.com
@Value 를 사용하여 바인딩을 하면 다음과 같은 자바 코드가 나온다.
@Value("${site-url.naver}")
private String naver;
@Value("${site-url.google}")
private String google;
@Value를 사용하여 바인딩을 하는 방법은 문자열을 사용하기에 오타가 날 수도 있다.
그래서 클래스 파일로 관리하는 방법을 찾아봤다.
1. properties에서 오토컴플릿을 지원하도록 하기 위한 dependency를 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2. 클래스 파일 생성
@ConfigurationProperties 이 좋은 이유 여러 표기법에 대해서 오토로 바인딩해 준다. ( 아래 참고 )
acme.my-project.person.first-name | properties 와 .yml에 권장되는 표기 방법 |
acme.myProject.person.firstName | 표준 카멜 케이스 문법. |
acme.my_project.person.first_name | .properties와 .yml 에서 사용가능한 방법 ( - 표기법이 더 표준 ) |
ACME_MYPROJECT_PERSON_FIRSTNAME | 시스템 환경 변수를 사용할 때 권장 |
@Component로 bean을 등록해야 한다.
@ConfigurationProperties에 prifix를 설정한다.
properties 파일에 있는 site-url.* 에 대하여 바인딩한다.
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import lombok.Data;
@Component
@ConfigurationProperties(prefix = "site-url")
@Data
public class siteUrlProperties {
private String naver;
private String google;
}
3. 확인
@Controller
@RequestMapping("/")
@Slf4j
public class MainController {
@Autowired
siteUrlProperties siteUrlProperties;
@GetMapping("")
@ResponseBody
public String test(Model model) {
return siteUrlProperties.getNaver();
}
}
@ConfiguConfigurationProperties 어노테이션을 사용하여 property 값을 사용하면 매핑을 유연하게 할 수 있다는 장점이 있지만 SpEL를 사용할 수 없다.
SpEL를 사용할 때에는 @Value를 사용해야 한다.
그 외에는 @ConfiguConfigurationProperties를 사용하는게 코드가 깔끔해진다.
'Spring > spring boot' 카테고리의 다른 글
Spring Boot 이메일 인증 구현하기 - 삽질중인 개발자 (9) | 2021.02.14 |
---|---|
RestTemplate generic response type 매핑 방법 - 삽질중인 개발자 (0) | 2020.06.28 |
Spring boot 로그 설정 및 출력 방법- logback 설정하기 - 삽질중인 개발자 (0) | 2020.05.24 |
spring boot static 파일 다운로드 구현 - 삽질중인 개발자 (0) | 2020.04.05 |
Spring boot oracle db 연동 , spring boot oracle jdbc 설정 - 삽질중인 개발자 (0) | 2019.12.16 |