java - 如何在(单元)测试中使用自动配置的bean,同时在main中手动配置bean?
问题描述
我对如何在测试环境中以不同方式连接事物感兴趣。我有一个特殊的场景,我想在main和 ActiveMQ 队列中有 Oracle AQ 队列test。
我正在使用 Spring Boot,我想出了如何让 Oracle AQ 工作。我正在使用 Java 配置。
甲骨文AQ
在主配置中,我定义了以下 bean(仅相关的 imo):
- JmsListenerContainerFactory (DefaultJmsListenerContainerFactory) (JmsListener需要)
- ConnectionFactory (AQjmsQueueConnectionFactory) (JmsTemplate 和 ContainerFactory 需要)
- 数据源(OracleDataSource)(ConnectionFactory 需要)
是使用:
org.springframework:spring-jms
javax.jms:jms
javax.transaction:jta
com.oracle:aqapi
com.oracle:ojdbc8
org.springframework.data:spring-data-oracle
活动MQ
另外,目前在另一个项目中,我有一个默认的 ActiveMQ 设置。在那里我只定义了一个 bean(也许我什至可以没有它):
- JmsListenerContainerFactory (DefaultJmsListenerContainerFactory)。
自动连线是:
- 连接工厂 (ActiveMQConnectionFactory)
- 并且这个connectionfactory没有数据源(vm内存上的activemq)
我用:
org.springframework:spring-jms
javax.jms:jms
org.springframework.boot:spring-boot-starter-activemq
org.apache.activemq:activemq-broker
Oracle AQ 和 ActiveMQ 结合
现在我想结合这两种方法:在 main 中使用 OracleAQ,在测试中使用 ActiveMQ。
- 我从添加 Oracle 依赖项开始。还没有问题。
- 然后我定义了 DataSource (OracleDataSource) bean。还没有问题。
- 然后我定义 ConnectionFactory(jmstemplate 和 containerfactory 需要)。问题:main现在有正确的 ConnectionFactory,但测试也有这个 ConnectionFactory。我想获得 ActiveMQConnectionFactory,但在test中获得 AQjmsQueueConnectionFactory 。以前,这是自动为我自动配置和连接的。
所以我想我的问题真的是:如何在测试中使用自动配置的bean,而main已经手动配置了相同接口的bean?
在这种情况下,很难(封装代码)在测试环境中手动重新组装自动配置的 bean,所以我正在考虑忽略主bean 左右的方向。另一个想法是自己创建一个自动配置。
还有其他想法吗?提示?例子?
我认为依赖注入的想法应该相当容易,但我不确定如何。
我还认为这种情况可能非常具体到排队,例如,在 main 中使用数据库类型 *(例如 postgres)和在 test 中使用 H2。
谢谢
编辑:
https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html解释了如何用你自己的 bean 替换自动配置。我需要的是相反的方式。
解决方案
推荐阅读
- javascript - javascript - 在客户端的浏览器中下载文件,然后立即实际下载文件
- windows - 需要修改批处理文件才能处理非 ASCII 文件名
- java - 位图压缩无法减小 PDF 文件大小
- css - 更改内联 css 不会触发转换
- reactjs - 当我构建 docker 映像时,我想阻止在本地目录中安装 node_modules
- c++ - 编译 cocosBuilder 时的 Xcode 错误 - stdlib.h 中的未知类型名称 ldiv_t
- python - 在 `setter` 内置方法中添加 `return self.__num` 语句有什么区别吗?
- angular - Stackblitz VS Visual Studio?
- javascript - 通过动态属性从对象数组创建对象
- python - 为什么我们需要 Django 中的虚拟环境?