在我们项目的一个公共库中,我需要根据Service使用它的两个接口实现进行区分。
我通过构造函数注入注入此接口,需要找出如何根据application.yml中的属性值确定使用的实现。
我查看了@Qualifier注释,但这似乎需要xml架构中的属性。我们没有这样的事情。
在我们的代码的一部分中,我们以这种方式读出了KafkaListener的属性
@KafkaListener(topics = "#{PathToProperties.getPrefix()}#OurBusinessProperties.getRelevantProperties()}"
我可以在Spring中使用相同的语法吗?
答案 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();
}