Как изменить расположение папки activemq-data в Spring Boot

#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 .

https://github.com/apache/activemq/blob/master/activemq-broker/src/main/java/org/apache/activemq/util/IOHelper.java#L60