상세 컨텐츠

본문 제목

스프링 부트에서 properties 값 받기

IT/Spring 및 Boot

by SINAFLA 2021. 7. 3. 14:56

본문

반응형

Properties 파일을 따로 작성하는 이유

Spring Boot를 이용해서 어플리케이션을 만들다 보면 외부에서 특정 값들을 주입하는 경우가 있다. 외부 API를 사용한 경우 API를 사용하기 위해 개발자 api-key를 발급 받는다. 그래서 발급 받은 api-key를 구현한 소스 코드에 추가해야 한다. 하지만 소스 코드에 하드 코딩한다면 악의적인 의도를 가진 사람이 값을 탈취하여 사용하면 큰일이 나고, '이 시스템이 더 이상 안전하지 않다'란 불신이 생긴다.

그래서 api-key 와 같은 외부 설정 값을 관리하는 파일에 적어두고 사용하기도 하고 .jar 파일을 실행하기 위한 커맨드에서 직접 값을 넘겨주기도 한다.

application.properties에 값 추가하기

mqtt.username=test
mqtt.password=test!@
mqtt.keep_alive_interval=60
mqtt.clean_session=true
mqtt.automatic_reconnect=true

 

properties에 추가한 값 Binding 클래스 작성하기

@Getter
@Setter
@Component
@ConstructingBinding
@ConfigurationProperties("mqtt")
public class MqttProperties {
	private final String username;
	private final String password;
	private final Integer keepAliveInterval;
	private final boolean cleanSession;
	private final boolean automaticReconnect;
}
  • @ConfigurationProperties의 value로 prefiex를 적어주면 application.properties에 선언한 value 값을 찾아온다. 중첩 클래스를 사용하게 되는 경우 이름을 똑같이 일치해야 한다.
  • @ConstructorBinding은 Springboot 2.3 버전 이후 생성자 주입방식으로 불변성을 가지고 Properties 파일을 만들 수 있는 방식이다.
  • @ConstructorBinding을 이용해서 final 필드에 대해 값을 주입한다.

 

properties 값을 찾고자 필수 기능

@SpringBootApplication
@ConfigurationPropertiesScan // 추가
public class TestApplication {
	public static void main(String[] args) {}

}
  • @SpringBootApplication 어노테이션이 붙은 main 메소드가 있는 클래스에서 @ConfigurationPropertiesScan 어노테이션을 추가한다. SpringBoot 2.2 버전 이후에 생겼으며, @ConfigurationProperties 어노테이션으로 등록한 class를 JVM이 빌드될 때 찾는다.

 


application.yml에 값 추가하기

mqtt:
	username: test
	password: test!@
	keep_alive_interval: 60
	clean_session: true
	automatic_reconnect: true

 

 

 

반응형

관련글 더보기

댓글 영역