根据application.yml的属性注入Spring Boot

时间:2017-07-28 08:47:21

标签: java spring spring-boot dependency-injection yaml

在我们项目的一个公共库中,我需要根据Service使用它的两个接口实现进行区分。

我通过构造函数注入注入此接口,需要找出如何根据application.yml中的属性值确定使用的实现。

我查看了@Qualifier注释,但这似乎需要xml架构中的属性。我们没有这样的事情。

在我们的代码的一部分中,我们以这种方式读出了KafkaListener的属性

@KafkaListener(topics = "#{PathToProperties.getPrefix()}#OurBusinessProperties.getRelevantProperties()}" 

我可以在Spring中使用相同的语法吗?

1 个答案:

答案 0 :(得分:3)

  

在我们项目的一个公共图书馆中,我需要制作一个   基于什么来区分接口的两个实现   服务正在使用它。

您可以使用配置文件执行此操作。

假设您有两个配置文件: production test

然后,您可以注释要在生产中使用的实现,如下所示:

@Profile("production")
@Component
class ProductionImplementation implements MyService {
}

在另一个组件上设置不同的配置文件:

@Profile("test")
@Component
class TestImplementation implements MyService {
}

然后使用以下参数启动spring-boot应用程序:

-Dspring.profiles.active=production

或者,您可以使用环境变量选择配置文件:

SPRING_PROFILES_ACTIVE = production

还有一个选择是创建一个工厂,根据一些环境配置创建一个不同的实例:

@Bean
public MyService myService() {
  if (condition) return FirstImplementation();
  return SecondImplementation();
}