ConfigurationProperties

dgh03207·2022년 4월 30일
0

Springboot 프로젝트

목록 보기
4/5
💡 *.properties *.yml 파일에 있는 property를 자바 클래스로 바인딩하여 사용할 수 있게 해주는 어노테이션

Spring boot에서 사용되는 각종 설정 정보들을 세팅하는 곳이 .properties, .yml이다.

OAuth를 사용한 소셜 로그인 구현 과정에서 yml에 있는 google의 clientId와 scope를 전달하는 API를 개발하는 과정에서 해당 기능이 필요하여 사용하게 되었다.

ConfigurationProperties를 이용한 오토 바인딩 사용법

구현 순서


  1. build.gradle에 추가
  2. config class추가
  3. 객체 생성하여 get!


1. build.gradle에 추가

build.gradle

annotationProcessor('org.springframework.boot:spring-boot-configuration-processor')

configurationProperties를 사용하기 위해 build.gradle에서 dependencies에 추가해주자


2. config class 추가

config class

@Configuration
@ConfigurationProperties(prefix="spring.security.oauth2.client.registration.google")
@Getter
@Setter
public class SocialLoginYamlConfig {
    private String clientId;
    private String scope;
}
  • ApplicationContext에 bean 생성을 하기위해 @Configuration 어노테이션을 사용한다.
  • @ConfigurationProperties 를 이용해서 prefix에 해당하는 요소들을 가져올 수 있도록 세팅한다.
    • application.yml의 형태가 다음과 아래와 같다면, prefix[spring.security.oauth2.client.registration.google](http://spring.security.oauth2.client.registration.google) 값을 넣는다.
  • @Getter , @Setter 추가.
    • @Setter를 추가하지 않으면 에러가 뜬다!!

application.yml

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: [아이디]
            client-secret: [비밀번호]
            scope: profile,email 

3. 사용하고자 하는 class에서 SocialLoginYamlConfig 객체 생성

@RequiredArgsConstructor
public class MyClass{
	final private SocialLoginYamlConfig socialLoginYamlConfig;
	
	public String getInfo(){
		return socialLoginYamlConfig.getClientId();
	}
}
  • SocialLoginYamlConfig 객체를 생성하여, @RequiredArgsConstructor 를 통해 빈주입을 해주었다.
  • getClientId()를 통해서 clientId 값을 얻어올 수 있다.


에러상황

값이 null로 들어온 경우

  • 본인이 겪었던 에러 사항인데, 결론부터 말하자면 prefix를 잘못 넣어줘서 해당 에러가 발생했다.
  • application.yml 이 아래와 같을때, client-id 값을 가져오고 싶다면, prefix는 client-id 전까지의 모든 경로를 다 넣어주어야 한다. 그런데 나는 spring.security.oauth2.client.registration 까지 prefix에 넣어주었고, 그 결과 값을 계속해서 가져오지 못하고 null값이 떴다.
    spring:
      security:
        oauth2:
          client:
            registration:
              google:
                client-id: [아이디]
                client-secret: [비밀번호]
                scope: profile,email 
    @Configuration
    @ConfigurationProperties(prefix="spring.security.oauth2.client.registration.google")
    @Getter
    @Setter
    public class SocialLoginYamlConfig {
        private String clientId;
        private String scope;
    }
    



Reference

profile
같이 공부하자!

0개의 댓글