복붙노트

[SPRING] Spring에서 프로그래밍 방식으로 현재 활성 / 기본 환경 프로파일을 얻는 방법은 무엇입니까?

SPRING

Spring에서 프로그래밍 방식으로 현재 활성 / 기본 환경 프로파일을 얻는 방법은 무엇입니까?

다른 현재 환경 프로파일을 기반으로 다른 로직을 코딩해야합니다. Spring에서 현재 활성 프로필과 기본 프로필을 어떻게 얻을 수 있습니까?

해결법

  1. ==============================

    1.환경을 자동화 할 수 있습니다.

    환경을 자동화 할 수 있습니다.

    @Autowired
    Environment env;
    

    환경 제공 :

  2. ==============================

    2.사용자 1648825의 좋은 간단한 대답을 확장 (나는 말할 수없고 나의 편집은 거절되었다) :

    사용자 1648825의 좋은 간단한 대답을 확장 (나는 말할 수없고 나의 편집은 거절되었다) :

    @Value("${spring.profiles.active}")
    private String activeProfile;
    

    프로파일이 설정되어 있지 않으면 IllegalArgumentException이 throw 될 수 있습니다 (null 값을 얻음). 설정이 필요하다면 이것은 좋은 일일 수 있습니다. @Value에 'default'구문을 사용하지 않으면, 즉 :

    @Value("${spring.profiles.active:Unknown}")
    private String activeProfile;
    

    ... spring.profiles.active를 확인할 수없는 경우 activeProfile에 '알 수 없음'이 포함됩니다.

  3. ==============================

    3.여기에 더 완벽한 예제가 있습니다.

    여기에 더 완벽한 예제가 있습니다.

    자동 배선 환경

    먼저 환경 bean을 autowire하고 싶을 것이다.

    @Autowired
    private Environment environment;
    

    프로필이 활성 프로필에 있는지 확인

    그런 다음 getActiveProfiles ()를 사용하여 활성 프로파일 목록에 프로파일이 있는지 알아볼 수 있습니다. 다음은 getActiveProfiles ()에서 String []을 가져 와서 해당 배열에서 스트림을 가져온 다음 matcher를 사용하여 존재하는 경우 부울을 반환하는 여러 프로필 (대소 문자 구분 없음)을 확인하는 예제입니다.

    //Check if Active profiles contains "local" or "test"
    if(Arrays.stream(environment.getActiveProfiles()).anyMatch(
       env -> (env.equalsIgnoreCase("test") 
       || env.equalsIgnoreCase("local")) )) 
    {
       doSomethingForLocalOrTest();
    }
    //Check if Active profiles contains "prod"
    else if(Arrays.stream(environment.getActiveProfiles()).anyMatch(
       env -> (env.equalsIgnoreCase("prod")) )) 
    {
       doSomethingForProd();
    }
    

    비슷한 기능을 구현하기 위해 주석 @Profile ( "local")을 사용할 수도 있습니다.이 기술에 대한 자세한 정보는 다음과 같습니다. 스프링 프로파일

  4. ==============================

    4.

    @Value("${spring.profiles.active}")
    private String activeProfile;
    

    작동하며 EnvironmentAware를 구현할 필요가 없습니다. 그러나 나는이 접근법의 단점을 모른다.

  5. ==============================

    5.자동 와이어 링을 사용하지 않는다면 단순히 EnvironmentAware를 구현하십시오.

    자동 와이어 링을 사용하지 않는다면 단순히 EnvironmentAware를 구현하십시오.

  6. from https://stackoverflow.com/questions/9267799/how-do-you-get-current-active-default-environment-profile-programmatically-in-sp by cc-by-sa and MIT license