스프링에서 Environment를 설정하는 다양한 방법들

probsno·2021년 4월 1일
5

SpringCore

목록 보기
4/9

1. Profile을 설정하는 방법

profile이란?

profile은 개발환경의 profile로 개발환경, 테스트환경, 서비스환경마다 다르게 프로필을 정의해서 설정하고 싶을때 사용하는 기능임.

profile은 어떻게 확인해?

@Component
public class AppRunner implements ApplicationRunner {

    @Autowired
    ApplicationContext context;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        Environment env = context.getEnvironment();
        System.out.println(Arrays.toString(env.getActiveProfiles()));
        System.out.println(Arrays.toString(env.getDefaultProfiles()));

        env.getProperty("app.name");
    }
}

ApplicationContext 안에는 Environment타입의 필드가 있는데, context.getEnvironment()로 꺼내와서 살펴볼 수 있다.

  • env.getActiveProfiles()는 현재 설정되어있는 profile을 Array로 가져옴(복수로 설정이 가능하기 때문에)
  • env.getDefaultProfiles()는 기본값의 profile을 가져옴

profile설정은 어떻게?

  1. @Profile("{프로파일이름}") 어노테이션 이용하기
    직관적으로 코드로 보자면
@Configuration
@Profile("test") //프로파일 환경의 이름
public class TestConfiguration {
    //test프로파일 일때만 빈설정파일이 적용되어서 다른프로파일에서는 TestBookRepository를 주입받을 수 없음
    @Bean
    public BookRipository bookRipository(){
        return new TestBookRepository();
    }
}

코드에서 보다싶이 @configuration어노태이션이 달린 자바 설정파일에 붙이면, 해당 설정파일은 해당 프로필일 때만 작동하게 된다. 따라서 testBookRepository빈은 test프로파일 일 때만 주입 받을 수 있다.
그러면 해당이름의 프로파일로 동작 시키겠다는 의미. 따라서, @Profile("{프로파일이름}")의 프로파일 설정이 작동하게 된다.

  1. VM 옵션으로 profile값 설정해서 넘겨주기
    자바를 실행시킬때 JVM에 설정값을 넘겨주는 방법이다.
    스샷을 찍어논게 있어서 그걸 보면 금방 이해가 될걸(?)

그림두장에서 보다싶이 edit configurations를 누르고
vm option-Dspring.profiles.active="test"라고 쓰면 환경설정이 된다.

2. 환경변수를 설정/사용 다양한 방법들

환경변수란?

key = value로 된 환경마다 설정값이 다르게 설정할 수 있는 값으로 test환경이나 dev환경, service환경마다 다르게 무언가를 설정하고 싶을 때 사용하게 된다.

1.환경 변수를 설정하는 방법

환경 변수를 설정하는 방법은 두가지가 있는데,,,

  • XXX.properties파일을 이용하는 방법

  1. XXX.properties라는 환경변수를 담는 파일을 만든다.
    .properties파일은 resources디렉토리 밑에 있어야 target파일 밑에 제대로 들어감.
  2. XXX.properties파일 안에 key, value 로 값을 넣어준다
  • vm option으로 넘겨주는 방법

vm option에 -Dkey=value로 key,value값을 넘겨주면 됨.

2. 설정한 환경 변수를 가져오는 방법

일단은, 읽어올 .properties파일을 알려줘야 한다. 어떻게?

@SpringBootApplication
@PropertySource("classpath:/app.properties")
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);

    }

}

@SprinngBootApplication이 달린 스프링부트 어플리케이션에다가 @PropertySource("classpath:/app.properties") 어노태이션을 달아준다.
classpath:는 target의 classes파일을 가르킴

가져오는 방법도 역시 두가지가 있다...

  • @value("")로 가져오는 방법
@Component
public class AppRunner implements ApplicationRunner {

    @Autowired
    ApplicationContext context;

    @Value("{app.name:""}")
    String appName;
}
  • Environment 객체로 가져오는 방법
    Environment의 getProperty("") 매서드로 가져올 수 있다.
@Component
public class AppRunner implements ApplicationRunner {

    @Autowired
    ApplicationContext context;


    @Override
    public void run(ApplicationArguments args) throws Exception {
        Environment env = context.getEnvironment();

        env.getProperty("app.name");
    }
}
profile
3개국어 쌉가능한 주니어 개발자

0개의 댓글