#spring-boot #activemq
#spring-boot #activemq
Вопрос:
Мне нужно изменить папку данных моего встроенного экземпляра activemq. Я использую, spring-boot-starter-activemq
который создает папку activemq-data
в папке maven $baseDir
. Я хотел бы переместить ее в target
папку, чтобы иметь возможность удалить папку с помощью команды mvn clean
.
Я нашел только следующую статью, но когда я передаю системное свойство activemq.store.dir
в свой интеграционный тест, это не работает. http://activemq.apache.org/how-do-i-change-the-message-store-directory-for-an-embedded-broker.html
Я попытался выяснить, возможно ли настроить ее в application.properties
файле, но, похоже, это невозможно: https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/activemq/ActiveMQProperties.java
Ответ №1:
Spring Boot не выполняет автоматическую настройку встроенного режима для ActiveMQ. Все сделано на уровне ActiveMQ, поэтому вам следует обратиться к их документации. Как вы уже отмечали, вам следует установить activemq.store.dir
системное свойство.
Если вы попытаетесь установить обычное свойство Spring Boot в своем интеграционном тесте, это не будет системным свойством, так что это не сработает. Кроме того, если вы попытаетесь установить системное свойство в @Before
, оно будет установлено слишком поздно, поскольку контекст уже будет изменен
Я не понимаю, зачем вам постоянный брокер для интеграционных тестов, для меня это выглядит как запах. Как насчет того, чтобы позволить Spring Boot делать свое дело? Если вы не настроите какой-либо URL-адрес брокера, вы получите vm://localhost?broker.persistent=false
и это вообще не приведет к созданию какого-либо каталога.
Комментарии:
1. Да, непостоянный брокер был бы лучше для интеграционного теста, но есть одна проблема.
2. Да, непостоянный брокер был бы лучше для интеграционного теста, но есть одна проблема. В журнале я могу найти следующие сообщения: 1. ActiveMQ запущен 2. Camel отправляет сообщение в мою очередь 3. ActiveMQ остановлен 4. ActiveMQ запущен 5. Клиент JMS получает сообщение 6. ActiveMQ останавливается, когда нет потребителя, ActiveMQ останавливается. Я могу получать сообщения асинхронно только перед вызовом camel message.
Ответ №2:
После некоторой отладки я обнаружил, что мне нужно использовать другое системное свойство: org.apache.activemq.default.directory.prefix
.