我需要添加一个接口的多个实现,并且应根据配置文件选择其中一个。
例如
interface Test{
public void test();
}
@Service
@Profile("local")
class Service1 implements Test{
public void test(){
}
}
@Service
class Service2 implements Test{
public void test(){
}
}
@SpringBootApplication
public class Application {
private final Test test;
public Application(final Test test) {
this.test = test;
}
@PostConstruct
public void setup() {
test.test();
}
}
我的意图是当我使用-Dspring.profiles.active = local时应调用Service1或应调用service2,但是我遇到异常 缺少用于测试的bean。
答案 0 :(得分:2)
为Service2
添加default个人资料:
@Service
@Profile("default")
class Service2 implements Test{
public void test(){
}
}
仅当未标识其他配置文件时,才会将bean添加到上下文中。如果您输入其他个人资料,例如-Dspring.profiles.active =“ demo”,此配置文件将被忽略。
答案 1 :(得分:0)
您可以将@ConditionalOnMissingBean
添加到Service2,这意味着它将仅在不存在其他实现的情况下使用,这将有效地使Service2成为除本地以外的任何其他配置文件中的默认实现
@Service
@ConditionalOnMissingBean
class Service2 implements Test {
public void test() {}
}