Programming/Spring Boot
외부 설정과 프로파일 (스프링 부트 활용 - 3)
흠냐아뤼
2020. 3. 9. 17:18
728x90
1. 외부 설정
테스트를 실행할 때 먼저 실제 코드에 있는 것들을 클래스 패스(main/java, main/resources 디렉토리)로 등록하고 빌드,
이후 테스트 코드 부분이 등록(test/java, test/resources)되고 빌드됨
따라서, 테스트 application.properties 에 사용하고자 하는 것이 없으면 에러남
->
1. 테스트 코드의 application.properties에 없는 것들 추가하기
2. 테스트 코드의 application.properties 삭제하기
3. 이름을 마음대로 지정하고(test.properties), 소스코드 내에서 등록하기
@TestPropertySource(locations = "classpath:/test.properties")
- 프로퍼티 우선순위, application.properties는 pdf 파일 확인
- 랜덤 값 설정하기
hongchan.age=${random.int}
- 플레이스 홀더
hongchan.name=hongchan
hongchan.fullname=${hongchan.name} Yun
- 여러 연관성 있는 프로퍼티를 빈으로 관리하기
@Value는 아주 정확하게 써야 함!, 메타 정보를 제공해주지 않음
따라서 이런 식으로 사용하는 것이 좋음 (AppProperties, app.name ... )
hongchan.name = hongchan
hongchan.age = ${random.int}
hongchan.fullName = ${hongchan.name} Yun
@Component
@ConfigurationProperties("hongchan")
public class HongchanProperties {
private String name;
private int age;
private String fullName;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
}
@Component
public class SampleRunner implements ApplicationRunner {
@Autowired
HongchanProperties hongchanProperties;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(hongchanProperties.getName());
System.out.println(hongchanProperties.getAge());
System.out.println(hongchanProperties.getFullName());
}
}
- 프로퍼티 값을 검증할 수 있음
@Component
@ConfigurationProperties("hongchan")
@Validated
public class HongchanProperties {
@NotEmpty
private String name;
...
}
2. 프로파일
- 프로파일? 빈들의 묶음
- 어떤 특정한 프로파일에서만 빈을 등록하고 싶은 경우
- 다른 프로파일에서는 다른 빈을 등록하고 싶은 경우
@Profile("test")
@Configuration
public class TestConfiguration {
@Bean
public String hello() {
return "hello test";
}
}
@Component
public class SampleRunner implements ApplicationRunner {
@Autowired
private String hello;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(hello);
}
}
spring.profiles.active=test // 어떤 프로파일을 활성화 할 것인가?
spring.profiles.include=prod // 어떤 프로파일을 추가할 것인가?
- 프로파일용 프로퍼티
이때, 프로파일 프로퍼티가 application.properties보다 우선순위 높음
인프런 백기선님 '스프링 부트’ 강의를 듣고 정리한 내용입니다.
728x90