프로퍼티 파일(properties)

편집일시: 2017-12-23 12:28 조회수: 2327 댓글수: 0
## 기본 #### 폴더 구성 ``` |-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에 주입 할 수있다. - ${프로퍼티 이름} 형식으로 취득하고자 하는 값을 지정한다. ## 파일을 두는 위치 속성 파일의 두는 곳은 몇 가지 읽기의 우선 순위가 존재한다. 1. 시작할 때 --spring.config.location에서 지정한 파일. 2. 현재 디렉토리 바로 아래의 config 디렉토리에 있는 파일. 3. 현재 디렉토리에있는 파일. 4. 클래스 경로 바로 아래의 config 패키지에 있는 파일. 5. 클래스 경로 바로 아래에 있는 파일. 숫자가 낮을 수록 우선 순위가 높다. 우선 순위가 낮은 설정은 상위의 설정을 덮어 쓴다. #### 폴더 구성(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의 환경 변수도 지정 가능. - 그러면 지정된 프로파일에 해당하는 속성 파일이 읽혀진다.