2017-05-09 66 views
0

我有一個組件EmbeddedRedis,它取決於從應用程序屬性文件中分析的配置對象RedisConfig。有不同的屬性文件,對應於可運行的可能的應用程序配置文件。因此,在配置文件master中運行時,組件EmbeddedRedis將根據配置文件master進行配置。Spring Boot - 使用不同配置文件的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; 

如何在Spring Boot中歸檔所需的結果?如果這不能直接工作,那麼獲取從不同屬性文件解析的上述配置對象是否也足夠了。

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

在此先感謝!

回答

0

你可以做這樣的事情: 考慮你有一個類定義(Redis的在你的例子)

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; 
    } 
} 

和一個配置類,如:

@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; 
    } 
} 

其啓動基於2個不同的對象在當前活動配置文件上如果當前活動配置文件是「主」,那麼serverConfig1()將被執行,否則serverConfig2()。

最後自動裝配類似這樣的服務/對象:

@Autowired 
CustomService service; 

這將取決於上述配置文件執行bean定義。

和財產的文件應該是這樣的:

spring.profiles.active=slave 
在這個例子中

所以,上面的代碼執行後,「名」的CustomService service;值將是「奴隸」,而不是「主人」,因爲目前的活躍配置文件是「奴隸」,因此「serverConfig2()」將得到執行

+0

嗨Afridi, 感謝您的答案,但我不太明白。代碼片段甚至不編譯,因爲@Profile註釋不適用於字段。 – twiechert

+0

對不起,@Profile(「master」)註釋只能用於不帶字段的方法。所以這個註釋應該被添加到Redis的bean定義的方法中。那麼你可以發佈你的每個Redis配置的bean定義嗎?在春季之後會根據活動配置文件初始化特定bean – Afridi

+0

檢查我的更新回答 – Afridi

相關問題