Меня интересует, как по-другому связать вещи в тестовой среде.
У меня есть особый сценарий, в котором я хотел бы иметь очереди Oracle AQ в main и очереди ActiveMQ в test .
Я использую Spring Boot и выяснил, как заставить работать Oracle AQ. Я использую конфигурацию Java.
OracleAQ
В основной конфигурации я определяю следующие 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
ActiveMQ
Кроме того, в настоящее время в другом проекте у меня есть настройка ActiveMQ по умолчанию.
Там я определяю только один боб (возможно, я могу даже обойтись без него):
- JmsListenerContainerFactory (DefaultJmsListenerContainerFactory).
Автоматически подключен:
- ConnectionFactory (ActiveMQConnectionFactory)
- и у этого фабрики соединений нет источника данных (activemq в памяти vm)
Я использую:
org.springframework:spring-jms
javax.jms:jms
org.springframework.boot:spring-boot-starter-activemq
org.apache.activemq:activemq-broker
Oracle AQ и ActiveMQ вместе взятые
Теперь я хотел бы объединить оба подхода: тестирование OracleAQ в основном и ActiveMQ.
- Я начал с добавления зависимостей Oracle. Нет проблем.
- Затем я определяю компонент DataSource (OracleDataSource). Нет проблем.
- Затем я определяю ConnectionFactory (необходим для jmstemplate и containerfactory). Проблема: main теперь имеет правильную ConnectionFactory, но у test также есть эта ConnectionFactory. Я хочу получить ActiveMQConnectionFactory, но получить AQjmsQueueConnectionFactory в test . Ранее это было автоматически настроено и подключено для меня.
Так что я думаю, что мой вопрос действительно: Как использовать автоматически настроенные bean-компоненты в test , в то время как main имеет настроенные вручную bean-объекты одного и того же интерфейса?
В этом случае трудно (инкапсулированный код) вручную собрать автоматически сконфигурированный bean-компонент в среде test , поэтому я думаю о направлении игнорирования main бобы или около того.
Другая идея заключается в создании автоконфигурации самостоятельно.
Есть еще идеи? чаевые? примеры?
Я думаю, что идея внедрения зависимости должна быть довольно простой, но я не знаю, как.
Я также думаю, что этот случай может быть очень специфичным для организации очередей, и может быть обобщен, например, на с использованием типа базы данных * (postgres, например) в main и H2 в тесте .
Спасибо
EDIT
https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html объясняет, как заменить автоконфигурирование на ваши собственные bean-компоненты. Что мне нужно, так это наоборот.