2017-05-09 54 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

相关问题