Add ActiveMQ MQTT connection URL auto-detection

Fixes gh-1638
This commit is contained in:
Henryk Konsek 2014-09-30 12:46:05 +02:00 committed by Phillip Webb
parent 4c51aa8e28
commit 0d8bde58c9
3 changed files with 31 additions and 0 deletions

View File

@ -16,8 +16,13 @@
package org.springframework.boot.autoconfigure.jms.activemq;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;
/**
@ -33,6 +38,14 @@ class ActiveMQConnectionFactoryFactory {
private static final String DEFAULT_NETWORK_BROKER_URL = "tcp://localhost:61616";
private static final Map<String, String> CLASS_BASED_BROKER_URLS;
static {
Map<String, String> map = new LinkedHashMap<String, String>();
map.put("org.apache.activemq.transport.mqtt.MQTTTransport",
"mqtt://localhost:1883");
CLASS_BASED_BROKER_URLS = Collections.unmodifiableMap(map);
}
private final ActiveMQProperties properties;
public ActiveMQConnectionFactoryFactory(ActiveMQProperties properties) {
@ -67,6 +80,13 @@ class ActiveMQConnectionFactoryFactory {
if (this.properties.getBrokerUrl() != null) {
return this.properties.getBrokerUrl();
}
if (this.properties.isAutodetectConnectionUrl()) {
for (Map.Entry<String, String> entry : CLASS_BASED_BROKER_URLS.entrySet()) {
if (ClassUtils.isPresent(entry.getKey(), null)) {
return entry.getValue();
}
}
}
if (this.properties.isInMemory()) {
return DEFAULT_EMBEDDED_BROKER_URL;
}

View File

@ -29,6 +29,8 @@ public class ActiveMQProperties {
private String brokerUrl;
private boolean autodetectConnectionUrl = true;
private boolean inMemory = true;
private boolean pooled;
@ -45,6 +47,14 @@ public class ActiveMQProperties {
this.brokerUrl = brokerUrl;
}
public boolean isAutodetectConnectionUrl() {
return this.autodetectConnectionUrl;
}
public void setAutodetectConnectionUrl(boolean autodetectConnectionUrl) {
this.autodetectConnectionUrl = autodetectConnectionUrl;
}
/**
* Specify if the default broker url should be in memory. Ignored if an explicit
* broker has been specified.

View File

@ -284,6 +284,7 @@ content into your application; rather pick only the properties that you need.
spring.activemq.broker-url=tcp://localhost:61616 # connection URL
spring.activemq.user=
spring.activemq.password=
spring.activemq.autodetect-connection-url=true # attempt to guess URL based on classpath
spring.activemq.in-memory=true # broker kind to create if no broker-url is specified
spring.activemq.pooled=false