우선 Environment가 무엇을 하는지 아래의 글을 한번 읽어보고 시작해도 좋고 바로 본론으로 넘어가도 괜찮다.

 

스프링 Environment객체를 사용하여 원하는 정보 불러오기

스프링 Environment객체를 사용하여 원하는 정보 불러오기 스프링은 필요한 기능을 가지고 있는 객체를 XML파일로 설정하여 외부에서 필드로 주입하는 방식을 사용한다. XML파일에 객체를 Bean태그

it-pig.tistory.com


이번 프로젝트에서 Environment를 이용해 자신이 현재 local 인지 prd 인지 구별하여 메소드를 실행할지 안할지 결정하는 로직이 있었다 나는 엄청 신기했다 그래서 따라서 구현해보았고 정리를 해보려한다.

   

로컬환경과 상용환경에 따른 다른메소드가 존재

간단한 테스트를 위한 local과 prd ,default 문자열 리스트를 만들어준다

List<String> PROFILES = Arrays.asList("local", "prd", "default");

 

Environment를 import해준다.

private Environment environment;

 

PROFILES를 stream 돌려서  anyMatch로 현재 환경가 맞는 경우 true를 반환한다 

PROFILES.stream().anyMatch(s -> {
    System.out.println(s);
    System.out.println(environment.acceptsProfiles(s));
    return environment.acceptsProfiles(s);
});

 

간단한 활용으로 아래 코드에서는 (위코드와 같이 List<String> 형태가 아닌 local prd 등을 enum으로 만들어 사용했다.)  현재 실행환경이 defalut 일 때만 DefaultMemberMapper의 메소드를 실행 할 수 있도록 하였다.

public MemberMapper memberMapper() {
    if (PROFILES.stream().map(ApplicationProfile::getName).anyMatch(requiredProfile -> environment.acceptsProfiles(requiredProfile))) {
        return new DefaultMemberMapper();
    }
    return new EmptyMemberMapper();
}

 

복사했습니다!