这是我的第一个问题! 我试图在我的Spring-boot应用程序中使用IBM MQ API(allclient),但是,我并不是在所有环境中都可用MQ。 我已经配置了spring创建一个MQQueueManager bean,当我运行一个实际的队列管理器时,它可以正常工作,但是如果不运行,则无法启动我的应用程序。 当我/其他人没有队列管理器时,我想从我的应用程序中删除MQQueueManager依赖项。
要解决这个问题,将这个bean注入另一个bean,所以删除MQQueueManager config类仍然会破坏我的另一个bean。
我尝试了下面的代码,尽管我将加载Mock bean而不是真实的bean。
src / main / java / com / app / config
@Configuration
@Profile("development")
public class MqConfig {
@Bean
public MQQueueManager connectToQueue(){
//connection to real QMGR
}
}
src / test / java / com / app / config
@Configuration
@Profile("test")
public class MqConfig {
@Bean
public MQQueueManager connectToQueue(){
return Mockito.mock(MQQueueManager.class);
}
}
Spring无法找到任何MQQueueManager Bean,因此应用程序无法启动。
答案 0 :(得分:0)
Spring-boot有条件注入。有很多注释可用于有条件地注入bean。我认为这是您尝试执行的操作。您可以在以下位置看到一些解释:https://iamninad.com/conditional-bean-creation-in-spring-boot/和此处:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html。
您不应尝试在应用程序的测试范围之外使用Mockito。 Mockito(和JUnit)是用于测试而非生产代码的框架。