Add auto-startup configuration property

Allow to disable the auto-startup flag of the default JMS and RabbitMQ
containers. This effectively permit to disable automatic listening via
configuration.

Closes gh-3587
This commit is contained in:
Stephane Nicoll
2015-07-24 06:35:26 +02:00
parent aa3393f18c
commit d6e914be87
7 changed files with 36 additions and 1 deletions

View File

@@ -44,6 +44,7 @@ class RabbitAnnotationDrivenConfiguration {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
Listener listenerConfig = config.getListener();
factory.setAutoStartup(listenerConfig.isAutoStartup());
if (listenerConfig.getAcknowledgeMode() != null) {
factory.setAcknowledgeMode(listenerConfig.getAcknowledgeMode());
}

View File

@@ -285,6 +285,11 @@ public class RabbitProperties {
public static class Listener {
/**
* Start the container automatically on startup.
*/
private boolean autoStartup = true;
/**
* Acknowledge mode of container.
*/
@@ -312,6 +317,14 @@ public class RabbitProperties {
*/
private Integer transactionSize;
public boolean isAutoStartup() {
return autoStartup;
}
public void setAutoStartup(boolean autoStartup) {
this.autoStartup = autoStartup;
}
public AcknowledgeMode getAcknowledgeMode() {
return this.acknowledgeMode;
}

View File

@@ -68,6 +68,7 @@ class JmsAnnotationDrivenConfiguration {
factory.setDestinationResolver(this.destinationResolver);
}
JmsProperties.Listener listener = this.properties.getListener();
factory.setAutoStartup(listener.isAutoStartup());
if (listener.getAcknowledgeMode() != null) {
factory.setSessionAcknowledgeMode(listener.getAcknowledgeMode().getMode());
}

View File

@@ -23,6 +23,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
*
* @author Greg Turnquist
* @author Phillip Webb
* @author Stephane Nicoll
*/
@ConfigurationProperties(prefix = "spring.jms")
public class JmsProperties {
@@ -62,6 +63,11 @@ public class JmsProperties {
public static class Listener {
/**
* Start the container automatically on startup.
*/
private boolean autoStartup = true;
/**
* Acknowledge mode of the container. By default, the listener is
* transacted with automatic acknowledgment.
@@ -78,6 +84,14 @@ public class JmsProperties {
*/
private Integer maxConcurrency;
public boolean isAutoStartup() {
return autoStartup;
}
public void setAutoStartup(boolean autoStartup) {
this.autoStartup = autoStartup;
}
public AcknowledgeMode getAcknowledgeMode() {
return acknowledgeMode;
}

View File

@@ -190,6 +190,7 @@ public class RabbitAutoConfigurationTests {
@Test
public void testRabbitListenerContainerFactoryWithCustomSettings() {
load(TestConfiguration.class,
"spring.rabbitmq.listener.autoStartup:false",
"spring.rabbitmq.listener.acknowledgeMode:manual",
"spring.rabbitmq.listener.concurrency:5",
"spring.rabbitmq.listener.maxConcurrency:10",
@@ -199,6 +200,7 @@ public class RabbitAutoConfigurationTests {
.getBean("rabbitListenerContainerFactory",
SimpleRabbitListenerContainerFactory.class);
DirectFieldAccessor dfa = new DirectFieldAccessor(rabbitListenerContainerFactory);
assertEquals(false, dfa.getPropertyValue("autoStartup"));
assertEquals(AcknowledgeMode.MANUAL,
dfa.getPropertyValue("acknowledgeMode"));
assertEquals(5, dfa.getPropertyValue("concurrentConsumers"));

View File

@@ -147,6 +147,7 @@ public class JmsAutoConfigurationTests {
@Test
public void testJmsListenerContainerFactoryWithCustomSettings() {
load(EnableJmsConfiguration.class,
"spring.jms.listener.autoStartup=false",
"spring.jms.listener.acknowledgeMode=client",
"spring.jms.listener.concurrency=2",
"spring.jms.listener.maxConcurrency=10");
@@ -156,9 +157,10 @@ public class JmsAutoConfigurationTests {
jmsListenerContainerFactory.getClass());
DefaultMessageListenerContainer listenerContainer = ((DefaultJmsListenerContainerFactory)
jmsListenerContainerFactory).createListenerContainer(mock(JmsListenerEndpoint.class));
assertEquals(false, listenerContainer.isAutoStartup());
assertEquals(Session.CLIENT_ACKNOWLEDGE, listenerContainer.getSessionAcknowledgeMode());
assertEquals(2, listenerContainer.getConcurrentConsumers());
assertEquals(10, listenerContainer.getMaxConcurrentConsumers());
assertEquals(Session.CLIENT_ACKNOWLEDGE, listenerContainer.getSessionAcknowledgeMode());
}
@Test