외부설정이란
이전의 외부설정 방식
개선된 외부설정 방식
외부설정의 일반적인 방법
-Dusername=chobolevel
main()
메서드의 args
파라미터를 통해 받을 수 있음--username=chobolevel
application.properties, application.yml
등)OS 환경 변수
모든 애플리케이션에서 조회 가능한 변수
다른 외부설정에 비해 사용 범위가 가장 넓음
윈도우에서는 set
명령어로 조회 가능(cmd) → 예) set JAVA_HOME
자바 애플리케이션에서의 조회
System.getenv()
통해 Map형식으로 조회가 가능함System.getenv()
메서드에 String 형식으로 특정 key값을 넘겨주면 특정 환경변수 조회 가능자바 시스템 속성
실행된 JVM에서 접근 가능한 외부 설정
추가적으로 자바가 미리 설정해두고 사용하는 변수도 존재함
자바 시스템 속성 지정 방법
java -Durl=dev -jar app.jar
-D
옵션을 통해서 key=value
형식으로 사용, 예제는 url=dev
를 지정-jar
보다 앞에서 명령어를 입력해야함자바 애플리케이션에서의 조회
System.getProperties()
**를 통해 Map 형식으로 조회getProperty()
**메서드에 String 형태로 key값을 넘겨주면 조회 가능커맨드 라인 인수
애플리케이션 실행 시점에 외부 설정값을 **main()
**메서드의 args 파라미터로 전달하는 방식
커맨드 라인 인수 지정 방법
java -jar app.jar dataA dataB
key=value
형식으로는 전달되지 않음자바 애플리케이션에서의 조회
String 배열의 args 파라미터를 조회 가능
커맨드 라인 옵션 인수
앞선 커맨드 라인 인수가 key=value
형식으로 조회/등록 되지 않는 단점을 극복한 외부설정 방식
커맨드 라인 옵션 인수 지정 방법
java -jar app.jar --username=chobolevel --username=chobo
자바 애플리케이션에서의 조회
getOptionNames()
**를 통해 외부설정 key값을 set형태로 조회getOptionValues()
**를 톻해 String 타입 key를 전달하면 List형태로 조회외부 설정 통합
스프링에서는 앞선 다양한 외부 설정을 지원하지만 각각 다른 방식으로 조회하는 불편함이 존재
스프링에서는 이를 위해 PropertySource라는 추상 클래스를 제공하고 각 외부설정에 따라 xxxPropertySource 구현체를 만들어둠
이러한 구현체를 Environment에서 사용할 수 있게 연결해둠
Environment
key=value
형식으로 조회 가능함getProperty(key)
**를 통해 조회 가능외부 설정 파일
내부 설정 파일
프로필
spring.profiles.active
외부설정에 넣으면 해당 프로필에는 해당 설정을 사용한다고 판단(OS변수, 자바 시스템 속성, 커맨드 라인 인수 등으로 설정 가능)spring.profiles.active=dev
dev라는 프로필 활성으로 application-dev.properties 파일을 읽어들임내부 설정 파일 병합
#---, !---
**를 통해 구분하고
yml파일의 경우 **---
**로 구분spring.config.activate.on-profile
**변수를 통해 구분spring.config.activate.on-profile
**을 지정하지 않은 설정을 기본값으로 인식함url
**을 조회하면 마지막에 작성한 hello.db.com이 조회됨전체 설정 파일의 우선순위
@TestPropertySource
(테스트에서 사용)