프로그래밍 노트/SPRING

[Spring] Environment 프로파일/프로퍼티

깡냉쓰 2020. 3. 11. 23:25
728x90
반응형

ApplicationContext는 프로파일과 프로퍼티를 다루는 EnvironmentCapable을 구현하여 사용한다.

ApplicationContext extends EnvironmentCapable
... getEnvironment()

프로파일은 빈들의 그룹이라고 생각하면 된다. Environment의 역할은 활성화할 프로파일을 확인 및 설정.
만약에 테스트시에만 필요한 빈들이 있다면 프프로파일(테스트)을 정의하여, 사용하면 된다.

프로파일 정의하기

// 이 자바 config는 Test할때 사용할 꺼야.
// Test할때는 TestBookRepository가 필요하거든...
@Configuration
@Profile("test")
public class TestConfiguration {
    @Bean
    public BookRepository bookRepository(){
        return new TestBookRepository();
    }
}

프로파일 설정하기

프로파일 설정하는 방법은 두 가지가 존재하는데, 아래 두가지를 사용하여 원하는 프로파일을 활성화할 수 있다.

  1. VM options 사용 => -Dspring.profiles.active="test"
  2. @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 =====");

    }
}
728x90
반응형