programing

봄에 프로그래밍 방식으로 현재 활성/기본 환경 프로파일을 얻으려면 어떻게 해야 합니까?

yoursource 2022. 7. 16. 00:52
반응형

봄에 프로그래밍 방식으로 현재 활성/기본 환경 프로파일을 얻으려면 어떻게 해야 합니까?

현재 환경 프로파일에 따라 다른 로직을 코드화할 필요가 있습니다.

Spring에서 현재 활성 프로파일과 기본 프로파일을 가져오려면 어떻게 해야 합니까?

를 자동 배선할 수 있습니다.

@Autowired
Environment env;

Environment제공 내용:

사용자 1648825의 심플한 답변 확장:

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

이로 인해 IlgalArgument가 발생할 수 있습니다.프로파일이 설정되어 있지 않은 경우는 예외입니다(null 값이 표시됩니다).설정할 필요가 있는 경우는, 좋은 방법이 됩니다.@Value 에 「default」구문을 사용하지 않는 경우는, 다음과 같이 합니다.

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

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

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

자동 배선 환경

먼저 환경빈을 자동 배선합니다.

@Autowired
private Environment environment;

활성 프로파일에 프로파일이 있는지 확인

그럼, 을 사용할 수 있습니다.getActiveProfiles()활성 프로파일 목록에 프로파일이 있는지 확인합니다.다음 예시는 다음과 같습니다.String[]부터getActiveProfiles()는, 그 어레이로부터 스트림을 취득해, 복수의 프로파일(대문자와 소문자가 구별되지 않는 것)을 체크하기 위해서, 복수의 프로파일이 존재하는 경우는 부울을 반환합니다.

//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")프로파일을 사용하면 전달된 매개 변수 또는 환경 매개 변수를 기반으로 선택적으로 구성할 수 있습니다.이 기술에 대한 자세한 내용은 다음과 같습니다.스프링 프로파일

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

이 기능은 작동하므로 Environment Aware를 구현할 필요가 없습니다.하지만 나는 이 접근법의 단점을 모른다.

자동 배선을 사용하지 않는 경우는, 간단하게 실장할 수 있습니다.EnvironmentAware

정적으로 접근할 수 있어야 한다는 요구가 있는 것 같습니다.

스프링이 아닌 수업의 정적 방법으로는 어떻게 하면 그런 것을 얻을 수 있을까요?– 에테르루스

해킹이지만, 폭로하기 위해 직접 수업할 수 있어요.아무 것도 호출하지 않도록 주의해야 합니다.SpringContext.getEnvironment()이 컴포넌트가 언제 인스턴스화될지 장담할 수 없기 때문에 모든 콩이 생성되기 전에 이 컴포넌트가 인스턴스화됩니다.

@Component
public class SpringContext
{
    private static Environment environment;

    public SpringContext(Environment environment) {
        SpringContext.environment = environment;
    }

    public static Environment getEnvironment() {
        if (environment == null) {
            throw new RuntimeException("Environment has not been set yet");
        }
        return environment;
    }
}

앞서 말한 바와 같이.환경을 자동 배선할 수 있습니다.

@Autowired
private Environment environment;

필요한 환경을 보다 쉽게 확인할 수 있는 것은 고객뿐입니다.

if (environment.acceptsProfiles(Profiles.of("test"))) {
    doStuffForTestEnv();

} else {
    doStuffForOtherProfiles();
}

또한 @Autowire를 사용하지 않거나 @Value를 주입하지 않는 경우(폴백 포함) 간단히 수행할 수 있습니다.

System.getProperty("spring.profiles.active", "unknown");

그러면 활성 프로필이 모두 반환됩니다(또는 '알 수 없는' 상태로 폴백됩니다).

언급URL : https://stackoverflow.com/questions/9267799/how-do-you-get-current-active-default-environment-profile-programmatically-in-sp

반응형