在application.yml中设置bean优先级

时间:2018-12-17 13:34:33

标签: java spring

我有2颗四季豆

@Bean
public CacheManager hazelcastCacheManger() {
    ...
}

@Bean
public CacheManager infinispanCacheManger() {
    ...
}

如何在application.yml属性文件中设置在应用程序中使用哪种CacheManager类型的bean?也许像参数化的限定词一样?

3 个答案:

答案 0 :(得分:2)

您可以在bean声明中指出@Profile

@Bean
@Profile("profile1")
public CacheManager hazelcastCacheManger() {
    ...
}

@Bean
@Profile("profile2")
public CacheManager infinispanCacheManger() {
    ...
}

application.yml中的哪个配置文件处于活动状态:

spring:
   profiles: 
      active:profile2

更多详细信息,Profile based properties and yaml example

如果您需要不同的配置文件来进行不同的启动,则可以在JVM启动属性中指定活动配置文件。

-Dspring.profiles.active=profile2

答案 1 :(得分:1)

您应该检查弹簧轮廓: https://www.baeldung.com/spring-profiles

您可以告诉每个bean应该在哪个配置文件中注入:

@Configuration
@Profile("hazelcast")
public class ConfHazelcast {
  @Bean
  public CacheManager hazelcastCacheManger() {
      ...
  }
}

@Configuration
@Profile("infinispan")
public class ConfInfinispan {
  @Bean
  public CacheManager infinispanCacheManger() {
      ...
  }
}

然后使用正确的配置文件启动项目:

java -Dspring.profiles.active=hazelcast -jar app.jar

答案 2 :(得分:1)

  

您可以在一个bean上标记@Primary。 https://www.baeldung.com/spring-primary