java - 如何根据配置文件加载一个或另一个 bean?
问题描述
我有两个实现相同接口的 bean。我注释了一个:
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
@Service
@Profile("production")
public class MailServiceImpl implements MailService {
另一个是:
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
@Service
@Profile("test")
public class SinkMailServiceImpl extends MailServiceImpl {
然后添加以下配置:
spring.profiles.active=test
当应用程序启动时,它成功地记录了这一点:
以下配置文件处于活动状态:测试
但是我收到此错误:
描述:
fr.project.backend.service.impl.UserServiceImpl 中的字段 mailService 需要一个 bean,但找到了 2 个: - mailServiceImpl:在 URL [jar:file:/app/app.jar!/BOOT-INF/classes!/ 中定义fr/project/backend/service/impl/MailServiceImpl.class] - sinkMailServiceImpl:在 URL [jar:file:/app/app.jar!/BOOT-INF/classes!/fr/project/backend/service/impl/ 中定义SinkMailServiceImpl.class]
行动:
考虑将其中一个 bean 标记为 @Primary,更新消费者以接受多个 bean,或者使用 @Qualifier 来标识应该使用的 bean
我不想将一个标记为@Primary
静态,并且@Qualifier
注释似乎也不符合我的需要。如何根据配置文件加载 bean?
解决方案
我认为您可以在服务类上使用 @ConditionalOnProperty(prefix="spring.profiles", name = "active", havingValue = "test") 注释来实现这一点,其中属性可以是您喜欢的任何东西。
推荐阅读
- angular - Angular 6:处理用户特定要求的最佳方式
- javascript - Freshdesk Sample Payload 对象数组
- django - 如何将QuerySet的注释值和Model的属性字段加入Django中的一个逻辑?
- php - 如果语句不起作用并且属性不起作用 laravel
- python - 使用 pymongo 查询大型 Mongodb 集合
- docker - 如何使用http api计算docker中容器的cpu利用率
- powerbi - MSBI 与 Power BI 及其用法
- spring-boot - 如何在微服务中的数据库(每个服务的每个实例的每个数据库)之间同步数据?
- flutter - 对于哪些 Flutter 小部件,我们需要使用 const?
- java - Android底页对话框如何设置底边距