인프런에서 백기선님의 스프링 프레임워크 핵심 기술 을 공부하며 개인적으로 정리한 글입니다.
Profile
Profile
은 빈들의 그룹이다.
예를 들어, 테스트 환경에서는 A 라는 빈을 사용하고 싶고, 배포 환경에서는 B 라는 빈을 사용하고 싶을 때, Profile
을 통해 이러한 설정을 잡아줄 수 있다.
정의
@Profile("이름")
을 통해 정해줄 수 있다.
@Repository
@Profile("test")
public class TestBookRepository implements BookRepository {
}
@Repository
@Profile("prod")
public class ProdBookRepository implements BookRepository {
}
사용 설정
예를 들어, "test"
환경을 사용하고 싶으면, 환경 변수 spring.profiles.active = test
를 설정해준다.
이는 application.properties
나, 실행 arguments
형식 어떤 것으로 값을 줘도 무방함.
표현식
Profile
의 값으로 다음과 같은 표현식이 가능하다.
! (not)
& (and)
| (or)
예를 들면 Profile("!test")
와 같이 사용할 수 있다.
Property
Property
를 통해 환경 변수에 대해 정의하고 접근할 수 있음.
1) JVM 시스템 Property
JVM 옵션으로 -Dkey=value
형태로 환경 변수를 정의할 수 있다.
예를 들어, -Dapp.name=spring5
으로 준 뒤, 이 값을 Environment
객체를 통해 다음과 같이 받아올 수 있다.
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
ApplicationContext ctx;
@Override
public void run(ApplicationArguments args) throws Exception {
Environment environment = ctx.getEnvironment();
System.out.println(environment.getProperty("app.name"));
}
}
실행하면 다음과 같이 출력된다.
spring5
2) @PropertySource
app.properties
파일에 별도로 환경 변수를 설정해놓을 수 있다.
예를 들어,
# app.properties
app.about = "heumsi"
로 작성하고, Application
구동 부에서 이 파일을 다음과 같이 읽어오도록 한다.
@SpringBootApplication
@PropertySource("classpath:/app.properties")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
이후 Runner
에서 이를 확인해보면, 잘 읽어오는 것을 알 수 있다.
@Override
public void run(ApplicationArguments args) throws Exception {
Environment environment = ctx.getEnvironment();
System.out.println(environment.getProperty("app.about"));
}
heumsi
우선 순위
같은 프로퍼티의 Key
값이 존재하는 경우에는 어떤 값이 사용될까?
즉 어떤 파일 혹은 로드 되는 값이 우선 순위가 높을까?
이에 대한 정리는 이전 포스팅 참고
'더 나은 엔지니어가 되기 위해 > 지금은 안쓰는 자바' 카테고리의 다른 글
[스프링 프레임워크 핵심 기술] Resource / Validation 추상화 (0) | 2020.02.21 |
---|---|
[스프링 프레임워크 핵심 기술] IoC 컨테이너 3 (0) | 2020.02.20 |
[스프링 프레임워크 핵심 기술] IoC 컨테이너 1 (0) | 2020.02.20 |
[스프링 부트 개념과 활용] 스프링 어드민 (0) | 2020.02.10 |
[스프링 부트 개념과 활용] 스프링 시큐리티 (0) | 2020.02.09 |