반응형

 

 

[ 프로퍼티 우선순위 ]

 

  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)

-> 높은게 낮은걸 오버라이딩 함

 

 

 

 

[ application.properties 파일 우선 순위 (높은게 낮은걸 덮어 씁니다.) ]

 

  1. file:./config/
  2. file:./
  3. classpath:/config/
  4. classpath:/

 

 

 

[ 15번 우선순위 - JAR 안에 있는 application properties ]

naeun.name = naeun

application.properties

 

@Component
public class SampleRunner implements ApplicationRunner {

    @Value("${naeun.name}")
    private String name;

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

}

SampleRunner.java

 

 

 

 

 

 

 

 

[ 4번 우선순위 - 커맨드라인 아규먼트 ]

mvn clean package 

mvn package 

java -jar target/spring-application-0.0.1-SNAPSHOT.jar --naeun.name=keesun

터미널

 

 

-> keesun으로 변경되어 찍힘

 

 

 

 

 

 

 

 [ test 파일 안의 application.properties ]

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

	@Autowired
	Environment environment;
	// 스프링에 있는 Environment import 하

	@Test
	void contextLoads() {
		assertThat(environment.getProperty("naeun.name"))
				.isEqualTo("whiteship");
	}

}

ApplicationTests

 

naeun.name = whiteship

test 파일 안의 application.properties

 

-> whiteship 이라고 찍힘

 

 

 

 

 

[ 2, 3번 우선순위 - 테스트에 있는 @TestPropertySource, @SpringBootTest 애노테이션의 properties 애트리뷰트 ]

@TestPropertySource(properties = "naeun.name=keesun3")
@SpringBootTest(properties = "naeun.name=keesun2")

 

 

 

* 너무 관리하기 힘들면 test.properties 라는 다른 이름의 프로퍼티스 생성해서 관리하면됨

 

 

 

[ random value 사용하기 ]

naeun.age = ${random.int}

 

 

 

[ 궁금한 점 ]

AssertThat 이 뭔지?

test 는 왜 있는지?

classpath 가 src?

 

반응형

+ Recent posts