Commit 0d8bde58 authored by Henryk Konsek's avatar Henryk Konsek Committed by Phillip Webb

Add ActiveMQ MQTT connection URL auto-detection

Fixes gh-1638
parent 4c51aa8e
...@@ -16,8 +16,13 @@ ...@@ -16,8 +16,13 @@
package org.springframework.boot.autoconfigure.jms.activemq; 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.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
/** /**
...@@ -33,6 +38,14 @@ class ActiveMQConnectionFactoryFactory { ...@@ -33,6 +38,14 @@ class ActiveMQConnectionFactoryFactory {
private static final String DEFAULT_NETWORK_BROKER_URL = "tcp://localhost:61616"; 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; private final ActiveMQProperties properties;
public ActiveMQConnectionFactoryFactory(ActiveMQProperties properties) { public ActiveMQConnectionFactoryFactory(ActiveMQProperties properties) {
...@@ -67,6 +80,13 @@ class ActiveMQConnectionFactoryFactory { ...@@ -67,6 +80,13 @@ class ActiveMQConnectionFactoryFactory {
if (this.properties.getBrokerUrl() != null) { if (this.properties.getBrokerUrl() != null) {
return this.properties.getBrokerUrl(); 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()) { if (this.properties.isInMemory()) {
return DEFAULT_EMBEDDED_BROKER_URL; return DEFAULT_EMBEDDED_BROKER_URL;
} }
......
...@@ -29,6 +29,8 @@ public class ActiveMQProperties { ...@@ -29,6 +29,8 @@ public class ActiveMQProperties {
private String brokerUrl; private String brokerUrl;
private boolean autodetectConnectionUrl = true;
private boolean inMemory = true; private boolean inMemory = true;
private boolean pooled; private boolean pooled;
...@@ -45,6 +47,14 @@ public class ActiveMQProperties { ...@@ -45,6 +47,14 @@ public class ActiveMQProperties {
this.brokerUrl = brokerUrl; 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 * Specify if the default broker url should be in memory. Ignored if an explicit
* broker has been specified. * broker has been specified.
......
...@@ -284,6 +284,7 @@ content into your application; rather pick only the properties that you need. ...@@ -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.broker-url=tcp://localhost:61616 # connection URL
spring.activemq.user= spring.activemq.user=
spring.activemq.password= 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.in-memory=true # broker kind to create if no broker-url is specified
spring.activemq.pooled=false spring.activemq.pooled=false
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment