레알윙 2020. 4. 13. 08:27
반응형

외부 설정

application.properties

key - value 형태로 properties에 작성

application.properties에 key value로 작성

 

@Component
public class SampleRunner implements ApplicationRunner{
	@Value("${jinseok.name}")
	private String name;

	@Override
	public void run(ApplicationArguments args) throws Exception {
		System.out.println("=====================================");
		System.out.println(name);
		System.out.println("=====================================");
	}
}

결과

 

properties random값

 

properties place holder

 

@TestPropertySource

우선순위가 2순위

 

 

프로퍼티 우선순위

우선순위가 제일 높은 방법으로 정의한 프로퍼티 값오버라이딩 된다.

 

  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)

 

 

Junit Test

모든 프로퍼티들은 기본적으로 Envioronment를 통해서 확인이 가능하다. 그렇기 때문에 Envioronment를 주입받아 getPropertypropertes 값을 가져올 수 있다.

@RunWith(SpringRunner.class)
@SpringBootTest
class SpringBootStudyApplicationTests {

	@Autowired
	Environment environment;
	
	@Test
	void contextLoads() {
		assertThat(environment.getProperty("jinseok.name")).isEqualTo("jinseok");
	}
}

 

Test 구조
결과

 

테스트코드를 실항하면, 먼저 테스트코드를 읽고, 빌드를 할때 src를 전부 읽어서 claasspath에 놓는다. 그 다음에 테스트 코드를 읽어 classpath오버라이딩한다. 

 

그렇기 때문에 main안에 있는 application.properties와 test안에 있는 application.properties가 동일한 key가 없다면 오류가 발생이 된다.

 

 

 

application.properties의 우선순위

application.properties를 같은 위치가 아니라 다른 위치에 둘 경우는 컴파일해도 덮어쓰지 않게된다.

  1. file:./config/ :프로젝트 디렉토리 바로 아래에 config라는 디렉토리를 만들고 그 안에 application.properties 만들어주는 방법
  2. file:./ :프로젝트 루트 바로 아래에 application.properties 만들어주는 방법
  3. classpath:/config/ :classpath 아래에 config라는 디렉토리를 만들고 그 안에 application.properties 만들어주는 방법
  4. classpath:/ :classpath 아래에 application.properties 만들어주는 방법

 

 

반응형