반응형
ApplicationContext는 프로파일과 프로퍼티를 다루는 EnvironmentCapable을 구현하여 사용한다.
ApplicationContext extends EnvironmentCapable
... getEnvironment()
프로파일은 빈들의 그룹이라고 생각하면 된다. Environment의 역할은 활성화할 프로파일을 확인 및 설정.
만약에 테스트시에만 필요한 빈들이 있다면 프프로파일(테스트)을 정의하여, 사용하면 된다.
프로파일 정의하기
// 이 자바 config는 Test할때 사용할 꺼야.
// Test할때는 TestBookRepository가 필요하거든...
@Configuration
@Profile("test")
public class TestConfiguration {
@Bean
public BookRepository bookRepository(){
return new TestBookRepository();
}
}
프로파일 설정하기
프로파일 설정하는 방법은 두 가지가 존재하는데, 아래 두가지를 사용하여 원하는 프로파일을 활성화할 수 있다.
- VM options 사용 => -Dspring.profiles.active="test"
- @ActiveProfiles 사용 => @ActiveProfiles("test")
intellij를 사용하면 Configuration에서 아래와같이 설정 가능
프로파일 설정한 후 아래 코드를 실행하면, 정상 실행되는 것을 볼 수 있다.
(test 프로파일을 활성화 하지 않고, 실행시키면 오류가 난다. bookRepository 빈이 존재하지 않기 때문)
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
private ApplicationContext ctx;
@Autowired
private BookRepository repository;
@Override
public void run(ApplicationArguments args) throws Exception {
Environment environment = ctx.getEnvironment();
System.out.println("===== environment =====");
System.out.println(Arrays.toString(environment.getActiveProfiles()));
System.out.println(Arrays.toString(environment.getDefaultProfiles()));
System.out.println("===== environment =====");
}
}
프로퍼티
프로퍼티는 애플리케이션을 구동할때 필요한 정보들을 key-value 형태로 정의한 설정값이라고 보면된다.
Environment는 프로퍼티 소스 설정 및 값을 가져올 수 있다.
프로퍼티 생성
resources 하위에 app.properties를 생성한다.
app.name=testApplication
프로퍼티 추가
@PropertySource를 활용해서 Environment에 프로퍼티를 추가한다.
@Component
@PropertySource("classpath:/app.properties")
public class AppRunner implements ApplicationRunner {
@Autowired
private ApplicationContext ctx;
@Value("${app.name}")
private String name;
@Override
public void run(ApplicationArguments args) throws Exception {
Environment environment = ctx.getEnvironment();
System.out.println("===== environment =====");
System.out.println("name"); // Value 어노테이션 사용
System.out.println(environment.getProperty("app.pw")); // Environment 사용
System.out.println("===== environment =====");
}
}
반응형
'프로그래밍 노트 > SPRING' 카테고리의 다른 글
[Spring] ResourceLoader, Resource 추상화 (0) | 2020.03.22 |
---|---|
[Spring] MessageSource (0) | 2020.03.16 |
[Spring] 모델 바인딩과 검증_3(Validator, BindingResult, Errors) (0) | 2020.01.06 |
[Spring] 모델 바인딩과 검증_2(Converter) (0) | 2019.12.26 |
[Spring] 모델 바인딩과 검증_1 (0) | 2019.12.23 |