首页 > 解决方案 > 如何根据配置文件加载一个或另一个 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?

标签: javaspring

解决方案


我认为您可以在服务类上使用 @ConditionalOnProperty(prefix="spring.profiles", name = "active", havingValue = "test") 注释来实现这一点,其中属性可以是您喜欢的任何东西。


推荐阅读