본문 바로가기

Spring/spring boot

@ConfigurationProperties 사용법 - 삽질중인 개발자

반응형

- @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를 사용하는게 코드가 깔끔해진다.

 

 

 

 

반응형