Spring Boot - 외부 설정 1부
업데이트:
스프링 부트 활용
외부 설정 1부
외부 설정 파일
-
애플리케이션에서 사용하는 여러 설정값을 애플리케이션 밖 또는 안에 정의할 수있는 기능이다.
-
application.properties
: 스프링 부트가 앱을 구동할때 자동으로 로딩하는 파일 컨벤션이다. -
application.properties
에서 정의 한 값을@Value
를 통해 가져올 수 있다.@Component public class SampleRunner implements ApplicationRunner { @Value("${henry.fullName}") private String name; @Value("${henry.age}") private int age; @Override public void run(ApplicationArguments args) throws Exception { System.out.println("================"); System.out.println(name); System.out.println(age); System.out.println("================"); } }
// application.properties // ${random.int} : 랜덤값 설정 (RandomValuePropertySource) // 플레이스 홀더 henry.name = wooody92 henry.age = ${random.int} henry.fullName = ${henry.name} Yoon
// result ================ wooody92 Yoon -645322863 ================
-
다양한 방법으로 프로퍼티를 사용 할 수 있기 때문에 우선순위가 존재한다.
프로퍼티 우선 순위
-
유저 홈 디렉토리에 있는 spring-boot-dev-tools.properties
-
테스트에 있는 @TestPropertySource
-
오버라이드 문제가 있기 때문에
test - application.properties
를 삭제하고custom.properties
를 만들어 테스트 할 수 있다.@RunWith(SpringRunner.class) @TestPropertySource(locations = "classpath:/test.properties") @SpringBootTest class ApplicationTest { @Autowired Environment environment; @Test public void contextLoad() throws Exception { assertThat(environment.getProperty("henry.name")) .isEqualTo("henry4"); } }
// test - resources - application.properties henry.name = henry4
-
-
@SpringBootTest 애노테이션의 properties 애트리뷰트
-
main
디렉토리 빌드하면main - application.properties
를 포함하여classpth
에 추가된다. -
그 다음으로 동일하게
test
디렉토리가 빌드되며test - application.properties
가classpath
에 추가되며main - application.properties
파일을 오버라이딩한다. -
특정 프로퍼티를
main
에서는 설정하고test
에서는 설정하지 않았다면application.properties
이 오버라이드 될때 파일 자체를 덮어쓰기 때문에test
에서는 찾을 수 없다.@RunWith(SpringRunner.class) @TestPropertySource(properties = "henry.name=henry3") @SpringBootTest(properties = "henry.name=henry2") class ApplicationTest { @Autowired Environment environment; @Test public void contextLoad() throws Exception { assertThat(environment.getProperty("henry.name")) .isEqualTo("henry3"); } }
// 1순위 (예제 기준) @TestPropertySource(properties = "henry.name=henry3") // 2순위 @SpringBootTest(properties = "henry.name=henry2") // 3순위 : main - resources - application.properties henry.name = henry1 henry.age = ${random.int} // 4순위 : main - resources - application.properties henry.name = wooody92 henry.age = ${random.int}
-
-
커맨드 라인 아규먼트
java -jar target/myapplication-0.0.1-SNAPSHOT.jar --henry.name=wooody92
-
SPRING_APPLICATION_JSON (환경 변수 또는 시스템 프로티) 에 들어있는
프로퍼티
-
ServletConfig 파라미터
-
ServletContext 파라미터
-
java:comp/env JNDI 애트리뷰트
-
System.getProperties() 자바 시스템 프로퍼티
-
OS 환경 변수
-
RandomValuePropertySource
-
JAR 밖에 있는 특정 프로파일용 application properties
-
JAR 안에 있는 특정 프로파일용 application properties
-
JAR 밖에 있는 application properties
-
JAR 안에 있는 application properties
-
@PropertySource
-
기본 프로퍼티 (SpringApplication.setDefaultProperties)
application.properties 우선 순위
-
위치에 따라 높은게 낮은걸 덮어 쓴다.
1. file:./config/ 2. file:./ 3. classpath:/config/ 4. classpath:/
댓글남기기