개발 목적 설정과 실 서비스 복적의 설정을 구분
해서 작성하는 방법으로 스프링이 제공하는 기능
프로필
을 지정하려면, 다음처럼 @Profile
어노테이션을 사용
// DsDevConfig.java
@Configuration
@Profile("dev")
public class DsDevConfig {
@Bean(destroyMethod = "close")
public DataSource dataSource() {
...
}
}
// DsRealConfig.java
@Configuration
@Profile("real")
public class DsRealConfig {
@Bean(destroyMethod = "close")
public DataSource dataSource() {
...
}
}
프로필
에 따라 달라짐선택
하기 위해 컨테이너 초기화전, setActivateProfiles()
매서드를 사용
// MainProfile.java
public class MainProfile {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
// 어떤 프로필을 사용할지 선택함
context.getEnvironment().setActiveProfiles("dev");
...
}
}
두 개 이상
의 프로필은 다음과 같이 활성화
context.getEnvironment().setActivateProfiles(“dev”, “mysql”);
시스템 프로퍼티
에 사용할 프로필 값 지정환경 변수
에 값을 설정
프로필의
우선 순위
는 다음과 같다.
- setActiveProfiles()
- 자바 시스템 프로퍼티
- OS 환경 변수
중첩
클래스를 이용해 프로필 설정을 한 파일에 모을 수 있음
// MemberConfigWithProfile.java
@Configuration
@EnableTransactionManagement
public class MemberConfigWithProfile {
...
// 같은 이름의 Bean을 등록하는 두 클래스를 다른 프로필로 설정
@Configuration
@Profile("dev")
public static class DsDevConfig {
@Bean(destroyMethod = "close")
public DataSource dataSource() {
...
}
}
@Configuration
@Profile("real")
public static class DsRealConfig {
@Bean(destroyMethod = "close")
public DataSource dataSource() {
...
}
}
}
위와 같은 방법으로 중첩 클래스를 설정할 경우, 반드시
static
으로 클래스를 선언해야 함
두 개 이상
의 프로필 이름
을 가질 수 있음
@Configuration
@Profile("real,test")
public class DataSourceJndiConfig{
...
느낌표(!)
사용 가능
@Configuration
@Profile("!real") // 프로필이 "dev", "real" 두 개만 있다면 해당 코드는 @Profile("dev")와 동일한 코드
public class DsDevConfig {
...
보통 특정 프로필이 사용되지 않을 때,
기본
으로 사용할 설정을 지정하는 용도로 사용
web.xml
에서 다음과 같이 spring.profiles.active 초기화 파라미터
를 이용해 프로필을 선택 가능
<!-- web.xml -->
...
<init-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</init-param>
...
스프링은 외부
의 프로퍼티 파일을 이용해 스프링 Bean을 설정하는 방법을 제공
# db.properties
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/spring5fs?characterEncoding=utf8
db.user=spring5
db.password=spring5
위 파일의 프로퍼티 값
을 자바 설정에서 사용가능
프로퍼티 파일
을 사용하려면 다음 두 가지를 설정
PropertySourcePlacholderConfigurer
Bean 설정@Value
어노테이션으로 프로퍼티 값 설정 // PropertyConfig.java
@Configuration
public class PropertyConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer properties() {
PropertySourcesPlaceholderConfigurer configurer =
new PropertySourcesPlaceholderConfigurer();
configurer.setLocations(
new ClassPathResource("db.properties"),
new ClassPathResource("info.properties"));
return configurer;
}
}
PropertySourcesPlaceholderConfigurer 타입의 Bean을 설정하는 매서드는
반드시
static
으로 선언해야 함
// DsConfigWithProp
@Configuration
public class DsConfigWithProp {
@Value("${db.driver}")
private String driver;
@Value("${db.url}")
private String jdbcUrl;
@Value("${db.user}")
private String user;
@Value("${db.password}")
private String password;
...
${구분자}
형식의 플레이스홀더를 값으로 가짐일치
하는 프로퍼티 값
으로 치환