programing

조건부 춘두 생성

linuxpc 2023. 8. 29. 20:12
반응형

조건부 춘두 생성

Spring 주석 구성에 대해 질문이 있습니다.나는 콩이 있습니다.

@Bean 
public ObservationWebSocketClient observationWebSocketClient(){
    log.info("creating web socket connection...");
    return new ObservationWebSocketClient();
}

그리고 나는 재산 파일을 가지고 있습니다.

@Autowired
Environment env;

속성 파일에서 특수 부울 속성을 사용합니다.

createWebsocket=true/false

Bean ObservationWebSocketClient를 만들어야 하는지 여부를 나타냅니다.속성 값이 거짓이면 웹 소켓 연결을 설정하지 않습니다.

이것을 실현할 기술적 가능성이 있습니까?

제가 이 기능을 사용하지는 않았지만 스프링 4의 주석으로 이 기능을 수행할 수 있을 것 같습니다.

먼저 다음을 생성합니다.Condition수업, 그 수업에서.ConditionContext에 액세스할 수 있습니다.Environment:

public class MyCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, 
                           AnnotatedTypeMetadata metadata) {
        Environment env = context.getEnvironment();
        return null != env 
               && "true".equals(env.getProperty("createWebSocket"));
    }
}

그런 다음 콩에 주석을 달아야 합니다.

@Bean
@Conditional(MyCondition.class)
public ObservationWebSocketClient observationWebSocketClient(){
    log.info("creating web socket connection...");
    return new ObservationWebSocketClient();
}

편집spring-boot주석@ConditionalOnProperty이를 일반적으로 구현했습니다. 소스 코드:Condition관심 있는 사람들을 위해 여기 github에서 사용할 수 있다는 것을 평가하는 데 사용됩니다.이러한 기능성이 필요한 경우 많은 사용자 지정보다는 유사한 구현을 사용하는 것이 좋습니다.Condition실행.

빈 메소드에 주석 달기@ConditionalOnProperty("createWebSocket").

스프링 부트는 여러 가지 유용한 조건을 사전 패키지로 제공합니다.

Spring Boot 2+의 경우 다음을 간단히 사용할 수 있습니다.

@Profile("prod")
or
@Profile({"prod","stg"})

이렇게 하면 프로덕션 또는 스테이징을 위해 원하는 프로필/프로필을 필터링할 수 있으며, 해당 주석을 사용하여 기본 Bean에 대해서는 변수 spring.profiles.active를 "prod" 및 "prod" 또는 "stg"와 동일하게 설정할 때만 Springboot에 의해 로드됩니다.이 변수는 OS 환경 변수에 설정하거나 명령줄(예: -Dsping.profiles.active=dll)을 사용하여 설정할 수 있습니다.

저는 Spring 3.1을 사용하여 이 문제를 해결할 수 있습니다.@Profiles,왜냐면@Conditional주석은 조건부 빈 등록(조건부 확인을 위한 사용자 정의 전략)을 정의할 수 있는 기회를 제공합니다.@Profiles논리를 기반으로 할 수 있습니다.Environment변수 전용입니다.

언급URL : https://stackoverflow.com/questions/29844271/conditional-spring-bean-creation

반응형