조건부 춘두 생성
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
'programing' 카테고리의 다른 글
가져오기 오류: DLL 로드 실패: %1은 올바른 Win32 응용 프로그램이 아닙니다.하지만 DLL은 거기에 있습니다. (0) | 2023.09.03 |
---|---|
연결을 사용하여 업데이트 후속 처리 (0) | 2023.08.29 |
라라벨에서 BelongsToHasOne과 HasOne의 차이점은 무엇입니까? (0) | 2023.08.29 |
MariaDB가 충돌하는 이유를 찾는 방법은 무엇입니까? (0) | 2023.08.29 |
일반 오류 해결 방법: 2006 MySQL 서버가 사라졌습니다. (0) | 2023.08.29 |