Java

[Spring Boot] 다양한 외부 설정(application.properties) 방법 및 활용

cob 2023. 6. 14. 00:06

 

 

1. 프로퍼티 우선 순위

1. 유저 홈 디렉토리에 있는 spring-boot-dev-tools.properties
2. 테스트에 있는 @TestPropertySource
3. @SpringBootTest 애노테이션의 properties 애트리뷰트
4. 커맨드 라인 아규먼트
5. SPRING_APPLICATION_JSON (환경 변수 또는 시스템 프로티) 에 들어있는 프로퍼티
6. ServletConfig 파라미터
7. ServletContext 파라미터
8. java:comp/env JNDI 애트리뷰트
9. System.getProperties() 자바 시스템 프로퍼티
10. OS 환경 변수
11. RandomValuePropertySource
12. JAR 밖에 있는 특정 프로파일용 application properties
13. JAR 안에 있는 특정 프로파일용 application properties
14. JAR 밖에 있는 application properties
15. JAR 안에 있는 application properties
16. @PropertySource
17. 기본 프로퍼티 (SpringApplication.setDefaultProperties)

 

 

 


2. 프로퍼티 설정 (application.properties) 방법

application.properties 파일

  • application.properties 파일에 key = value 형태로 값을 설정해준다.

 

프로퍼티 값 가져오기
값 출력

 

 

 


3. 테스트 환경에서 프로퍼티 설정 방법

동일한 위치에 resources 폴더를 생성하고, Test Resources 설정을 한다.

테스트 resources

  • 프로젝트 설정(Ctrl+Alt+Shift+S) => resources [클릭] => Test Resources [클릭] => apply [클릭]  

 

 

application.properties 테스트

 

프로퍼티 확인

  • 소스 코드 빌드 후에 테스트 코드를 빌드하게 되는데 application.properties 파일은 덮어쓰기가 된다. 
  • 소스 코드와 테스트 코드의 application.properties파일에는 동일한 key값이 존재해야한다..

 

 


4.  application.properties 우선 순위

application.properties 파일은 아래 4가지 경로에 만들 수 있지만,  우선순위에 따라 덮어쓰기가 된다.
1. file:./config/
2. file:./
3. classpath:/config/
4. classpath:/
  • file 경로 : src 폴더 하위에 application.properties
  • classpath 경로 : 기본적으로 만들어지는 resources 폴더 하위 application.properties 

 

 

 


5. 프로퍼티 랜덤값, 재사용 방법

# 기본 key=value
blog.name=bobo 

# 랜덤 설정
blog.age = ${random.int}

# 플레이스 홀더(재사용)
blog.fullname = ${blog.name} bobo

 

 


6. 프로퍼티 바인딩

6-1) 클래스 생성

application.properties 파일에있는 설정값과바인딩할 변수를 선언하고 getter, setter를 만든다.
@Component
@ConfigurationProperties("blog")
@Validated
public class BlogProperties {
    
    @NotEmpty
    private String name;
    
    private int age;
    
    private String fullName;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }
}
  • @Component : Bean에 등록
  • @ConfigurationProperties("blog") : 프로퍼티와 바인딩
  • @Validated : @NotEmpty등 프로퍼티를 검증하는데 사용된다.

 

 

6-2) 의존성 추가

빌드시에 ConfigurationProperties 선언 되어있는 클래스의 메타 정보를 추가해 자동완성을 사용할 수 있다.
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

 

 

6-3) 프로퍼티 사용

@Autowired를 통해 프로퍼티를 가져와 사용할 수 있다.
@Component
public class SampleRunner implements ApplicationRunner {

    @Autowired
    BlogProperties blogProperties;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("=================");
        System.out.println(blogProperties.getName());
        System.out.println(blogProperties.getAge());
        System.out.println("=================");
    }
}
반응형