문제

배경: 그래서 나는 여러 콩는 인터페이스 외부 시스템입니다.개발,그것은 편리하는 모의 외부 시스템을 대체 콩 인터페이스와 일부 구현을 생성하는 다소 정적 응답합니다.그래서 무엇이었을 하는 인터페이스를 만들고,실제 구현 및 스텁 구현 this:

public interface ExternalService {
// ...
}

@Service
public class ExternalServiceImpl implements ExternalService {
// ...
}

@Service
@Primary
@Profile({"stub"})
public class StubExternalService implements ExternalService {
// ...
}

...그리고 이동:는 경우 stub 프로필이 존재하지 않습니다,스텁-콩지 않을 얻을 로드다.는 경우,그것은 멋지게 대체는 실제 구현 때문에@기본 주석이 있습니다.

문제: 그러나 지금,나는 처음 실행 상황에서 나는 실제로 실제 구현의 동일한 인터페이스입니다.그 중 하나는 정의된 기본으로,그러나 다른 사용할 수도 있습을 통해서 응용 프로그램이다.

나처럼 여전히 만드는 스텁 서비스를 대체하기 위해 그들을 두지만,이번 내의 오래 된 방법을 정의하는 스텁로@기본 작동하지 않기 때문에,이미 하나의 기본 구현합니다.기본적으로 무엇을 나야의 방법을 로드하지 않는 기본 콩 때 스텁 프로파일 설정,그러나 나는 손실에 정확히 어떻게 할 것.웹사 검색하거나 다른 Stack Overflow 질문에 보이지 않을 수도 있습니다.

도움이 되었습니까?

해결책

로 대답은 의외로 간단하다:를 추가하지 않 연산자(! 이)앞의 프로필 이름:

@Service
@Primary
@Profile({"!stub"})
public class ExternalServiceImpl implements ExternalService {
// ...
}

이 방법은 콩은 단지 때로드 stub-프로필이 활성화되지 않습니다.에 대한 지원 이 기능이 추가되었에 봄 3.2M1.

거기에 하나의 경고하지만,:만약 당신이 작성 @Profile({"!stub", "foo"}), 쉼표로 취급한다"또는"이 아닌"및".그래서 이 예 콩 것이 활성화 하는 경우 stub 활동적이지 않은 경우 또는 foo 활동적이었다.

수정/추가하기: 봄 5.1 추가에 대한 지원 새로운 표현의 언어를 프로파일: !stub & foo 이 활성화되는 경우 stub 이 활성화되지 않고 foo 가 활성화됩니다.큰 성공!수도 있습 믹스 매치 ands 고 ors 제공되는 괄호를 사용: production & (us-east | eu-central).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top