2017-05-09 1 views
0

응용 프로그램의 등록 정보 파일에서 구문 분석 된 구성 객체 RedisConfig에 따라 구성 요소가 EmbeddedRedis입니다. 실행할 수있는 가능한 응용 프로그램 프로파일에 해당하는 다른 특성 파일이 있습니다. 따라서 프로필 master에서 실행하면 구성 요소 EmbeddedRedismaster 프로필에 따라 프로비저닝됩니다.스프링 부트 - 다른 프로파일을 사용하는 Autowire 구성 요소

로컬 Redis 클러스터를 설정해야하는 테스트 클래스에서 다른 모든 프로필에 따라 프로비저닝 된 객체가 Redis이어야합니다. 원하는 결과를 가져 오지 않는 @Qualifier 주석을 사용하여 아래에서 아이디어를 스케치했습니다.

@Autowired @Qualifier("dev-cluster-master") 
private Redis embeddedRedisMaster; 

@Autowired @Qualifier("dev-cluster-slave-001") 
private Redis embeddedRedisSlave1; 

@Autowired @Qualifier("dev-cluster-slave-002") 
private Redis embeddedRedisSlave2; 

스프링 부트에서 원하는 결과를 어떻게 보관할 수 있습니까? 그것이 직접 작동하지 않는다면, 다른 속성 파일들로부터 파싱 된 앞서 언급 한 설정 객체들을 얻는 것으로 충분할 것입니다.

@Component 
@ConfigurationProperties(prefix = "spring.redis") 
public class RedisConfig { 
.... 
} 

미리 감사드립니다.

답변

0

당신은 같은 것을 할 수 있습니다 기반이 다른 개체를 시작

@Configuration 
public class Config { 

    @Bean 
    @Profile("master") 
    CustomService serverConfig1(){ 
     CustomService service1 = new CustomService("master"); 
     return service1; 
    } 

    @Bean 
    @Profile("slave") 
    CustomService serverConfig2(){ 
     CustomService service1 = new CustomService("slave"); 
     return service1; 
    } 
} 

: 당신이 클래스 정의합니다 (예 레디 스)

public class CustomService { 

    private String name; 

    public CustomService(String name){ 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

과 같은 구성 클래스가 고려 현재 활성 프로파일. 현재 활성 프로파일이 "master"이면 serverConfig1()이 실행되고, 그렇지 않으면 serverConfig2()가 실행됩니다.

@Autowired 
CustomService service; 

이 뜻이 구성 파일에서 실행 빈 정의 위의 사항에 따라 다릅니다 마지막

그리고

이 같은 서비스/객체를 autowire가. 이 예에서, 그래서
spring.profiles.active=slave 

, 위의 코드를 실행 한 후, CustomService service;에서 '이름'의 값 대신 "마스터"의 "노예"가 될 것입니다 현재 때문에 :

및 속성 파일은 다음과 같아야합니다 활성 프로필은 "종속"이므로 "serverConfig2()"가 실행됩니다.

+0

안녕하세요, Afridi, 답변 해 주셔서 감사합니다. @Profile 주석은 필드에 적용 할 수 없기 때문에 코드 스 니펫은 컴파일되지 않습니다. – twiechert

+0

오 죄송합니다. @Profile ("master") 주석은 필드가없는 메소드에만 사용할 수 있습니다. 따라서이 주석은 Redis에 대한 빈 정의의 메소드에 추가되어야한다. 각 Redis 구성에 대한 bean 정의를 게시 할 수 있습니까 ?? 활성화 된 프로파일을 기초로 특정 bean을 초기화 할 것입니다. – Afridi

+0

"업데이트 된 응답을 확인하십시오. – Afridi

관련 문제