Kyutae Park

Kyutae Park

Business Developer

© 2024

spring boot ConfigurationProperties로 application 변수 사용하기

1. properties에 데이터 입력

application.properties 또는 application.yml파일에 필요한 값을 입력한다.

  • yml 설정 예시
    company:
      name: "EXBI"
      address: "서울"
      tel-number: "02-1234-1234"
      email: "master@exbi.co.kr"
    
  • properties 설정 예시
    company.name=EXBI
    company.address=서울
    company.tel-number=02-1234-1234
    company.email=master@exbi.co.kr
    

2. 값을 바인딩할 component 생성

@Component, @ConfigurationProperties을 적용하고, prefix값으로 company를 지정했다. Spring container가 properties파일을 읽고 Company객체에 값을 바인딩할 때 Setter를 이용하기 때문에 @Setter도 함께 선언해줘야 한다.

@Component
@ConfigurationProperties("company")
@Getter
@Setter
public class Company {
	// 바인드될 맴버변수를 선언
    private String name;
    private String address;
    private String telNumber;
    private String email;

	// 정상적으로 바인드 되었는지 확인하기 위해 toString을 재정의
    @Override
    public String toString() {
        return "Company{" +
                "name='" + name + '\'' +
                ", address='" + address + '\'' +
                ", telNumber='" + telNumber + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

3. 의존관계 설정

ConfigurationProperties를 추가하면 아래와 같은 메시지를 만나게 된다. Properies를 사용하기 위해 필요한 의존관계를 설정해야 한다.

  • Maven
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>
  • Gradle 4.5 이하
dependencies {
	compileOnly "org.springframework.boot:spring-boot-configuration-processor"
}
  • Gradle 4.6 이상
dependencies {
	annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
}

4. test case로 확인 해보기

@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class CompanyTest {

    @Autowired
    Company company;

    @Test
    public void companyValueTest() {
        //given
        String name = "EXBI";
        String address = "서울";
        String telNumber = "02-1234-1234";
        String email = "master@exbi.co.kr";

        //when

        //then
        System.out.println("company.toString(): " + company);
        assertEquals(name, company.getName());
        assertEquals(address, company.getAddress());
        assertEquals(telNumber, company.getTelNumber());
        assertEquals(email, company.getEmail());
    }
}

테스트 실행 결과 properties의 값이 Company객체에 바인딩된 것을 확인할 수 있다.