Spring Boot | 외부 설정 이용 | 프로퍼티 파일(properties)
기본
폴더 구성
|-build.gradle
`-src/main/
|-java/sample/springboot/
| `-Main.java
`-resources/
`-application.properties
Main.java
package sample.springboot;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class Main {
public static void main(String[] args) {
try (ConfigurableApplicationContext ctx = SpringApplication.run(Main.class, args)) {
Main m = ctx.getBean(Main.class);
m.hello();
}
}
@Value("${sample.value}")
private String value;
public void hello() {
System.out.println("sample.value = " + this.value);
}
}
실행 결과
sample.value = Hello Properties File!!
- 클래스 경로 아래에 application.properties라는 속성 파일을 배치한다.
- 그러면 Spring Boot가 자동으로 해당 파일을 읽어 준다.
- 속성 파일의 값은 @Value 애노테이션을 사용하여 Bean에 주입 할 수있다.
- ${프로퍼티 이름} 형식으로 취득하고자 하는 값을 지정한다.
파일을 두는 위치
속성 파일의 두는 곳은 몇 가지 읽기의 우선 순위가 존재한다.
- 시작할 때 –spring.config.location에서 지정한 파일.
- 현재 디렉토리 바로 아래의 config 디렉토리에 있는 파일.
- 현재 디렉토리에있는 파일.
- 클래스 경로 바로 아래의 config 패키지에 있는 파일.
- 클래스 경로 바로 아래에 있는 파일.
숫자가 낮을 수록 우선 순위가 높다.
우선 순위가 낮은 설정은 상위의 설정을 덮어 쓴다.
폴더 구성(jar내부)
|-application.properties
|-config/
| `-application.properties
`-sample/springboot/
`-Main.class
폴더 구성(실행할 때)
|-application.properties
|-other.properties
|-config/
| `-application.properties
`-build/libs/
`-spring-boot-sample.jar
other.properties
value5=other
application.properties(현재 디렉토리의 config 디렉토리 아래)
value4=currentdir/config
value5=currentdir/config
application.properties(현재 디렉토리 아래)
value3=currentdir/
value4=currentdir/
value5=currentdir/
application.properties(클래스 경로의 config 패키지 아래)
value2=classpath/config
value3=classpath/config
value4=classpath/config
value5=classpath/config
application.properties(클래스 경로 바로 아래)
value1=classpath/
value2=classpath/
value3=classpath/
value4=classpath/
value5=classpath/
Main.java
package sample.springboot;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class Main {
public static void main(String[] args) {
try (ConfigurableApplicationContext ctx = SpringApplication.run(Main.class, args)) {
Main m = ctx.getBean(Main.class);
m.hello();
}
}
@Value("${value1}") private String value1;
@Value("${value2}") private String value2;
@Value("${value3}") private String value3;
@Value("${value4}") private String value4;
@Value("${value5}") private String value5;
public void hello() {
System.out.println("value1=" + value1);
System.out.println("value2=" + value2);
System.out.println("value3=" + value3);
System.out.println("value4=" + value4);
System.out.println("value5=" + value5);
}
}
실행
$ java -jar build/libs/spring-boot-sample.jar --spring.config.location=other.properties
value1=classpath/
value2=classpath/config
value3=currentdir/
value4=currentdir/config
value5=other
우선 순위에 맞게 설정을 덮어 쓰고 있다.
프로파일을 지정
폴더 구성
|-application.properties
|-application-develop.properties
`-build/libs/
`-spring-boot-sample.jar
application.properties
value=release module
application-develop.properties
value=develop module
실행
$ java -jar build/libs/spring-boot-sample.jar
value=release module
$ java -jar build/libs/spring-boot-sample.jar --spring.profiles.active=develop
value=develop module
- 프로퍼티 파일을 application-[프로파일 이름].properties 형식으로 작성한다.
- 커멘트 라인 인수로 spring.profiles.active에 사용하려는 프로파일 이름을 지정한다. - 커멘드 라인 인수 이외에도 시스템 속성이나 OS의 환경 변수도 지정 가능.
- 그러면 지정된 프로파일에 해당하는 속성 파일이 읽혀진다.