Skip to content

Commit d6e914b

Browse files
committed
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 spring-projectsgh-3587
1 parent aa3393f commit d6e914b

File tree

7 files changed

+36
-1
lines changed

7 files changed

+36
-1
lines changed

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitAnnotationDrivenConfiguration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(
4444
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
4545
factory.setConnectionFactory(connectionFactory);
4646
Listener listenerConfig = config.getListener();
47+
factory.setAutoStartup(listenerConfig.isAutoStartup());
4748
if (listenerConfig.getAcknowledgeMode() != null) {
4849
factory.setAcknowledgeMode(listenerConfig.getAcknowledgeMode());
4950
}

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,11 @@ public Properties createSslProperties() {
285285

286286
public static class Listener {
287287

288+
/**
289+
* Start the container automatically on startup.
290+
*/
291+
private boolean autoStartup = true;
292+
288293
/**
289294
* Acknowledge mode of container.
290295
*/
@@ -312,6 +317,14 @@ public static class Listener {
312317
*/
313318
private Integer transactionSize;
314319

320+
public boolean isAutoStartup() {
321+
return autoStartup;
322+
}
323+
324+
public void setAutoStartup(boolean autoStartup) {
325+
this.autoStartup = autoStartup;
326+
}
327+
315328
public AcknowledgeMode getAcknowledgeMode() {
316329
return this.acknowledgeMode;
317330
}

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/JmsAnnotationDrivenConfiguration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(
6868
factory.setDestinationResolver(this.destinationResolver);
6969
}
7070
JmsProperties.Listener listener = this.properties.getListener();
71+
factory.setAutoStartup(listener.isAutoStartup());
7172
if (listener.getAcknowledgeMode() != null) {
7273
factory.setSessionAcknowledgeMode(listener.getAcknowledgeMode().getMode());
7374
}

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/JmsProperties.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
*
2424
* @author Greg Turnquist
2525
* @author Phillip Webb
26+
* @author Stephane Nicoll
2627
*/
2728
@ConfigurationProperties(prefix = "spring.jms")
2829
public class JmsProperties {
@@ -62,6 +63,11 @@ public Listener getListener() {
6263

6364
public static class Listener {
6465

66+
/**
67+
* Start the container automatically on startup.
68+
*/
69+
private boolean autoStartup = true;
70+
6571
/**
6672
* Acknowledge mode of the container. By default, the listener is
6773
* transacted with automatic acknowledgment.
@@ -78,6 +84,14 @@ public static class Listener {
7884
*/
7985
private Integer maxConcurrency;
8086

87+
public boolean isAutoStartup() {
88+
return autoStartup;
89+
}
90+
91+
public void setAutoStartup(boolean autoStartup) {
92+
this.autoStartup = autoStartup;
93+
}
94+
8195
public AcknowledgeMode getAcknowledgeMode() {
8296
return acknowledgeMode;
8397
}

spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfigurationTests.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ public void testRabbitListenerContainerFactoryBackOff() {
190190
@Test
191191
public void testRabbitListenerContainerFactoryWithCustomSettings() {
192192
load(TestConfiguration.class,
193+
"spring.rabbitmq.listener.autoStartup:false",
193194
"spring.rabbitmq.listener.acknowledgeMode:manual",
194195
"spring.rabbitmq.listener.concurrency:5",
195196
"spring.rabbitmq.listener.maxConcurrency:10",
@@ -199,6 +200,7 @@ public void testRabbitListenerContainerFactoryWithCustomSettings() {
199200
.getBean("rabbitListenerContainerFactory",
200201
SimpleRabbitListenerContainerFactory.class);
201202
DirectFieldAccessor dfa = new DirectFieldAccessor(rabbitListenerContainerFactory);
203+
assertEquals(false, dfa.getPropertyValue("autoStartup"));
202204
assertEquals(AcknowledgeMode.MANUAL,
203205
dfa.getPropertyValue("acknowledgeMode"));
204206
assertEquals(5, dfa.getPropertyValue("concurrentConsumers"));

spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jms/JmsAutoConfigurationTests.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ public void testJmsListenerContainerFactoryBackOff() {
147147
@Test
148148
public void testJmsListenerContainerFactoryWithCustomSettings() {
149149
load(EnableJmsConfiguration.class,
150+
"spring.jms.listener.autoStartup=false",
150151
"spring.jms.listener.acknowledgeMode=client",
151152
"spring.jms.listener.concurrency=2",
152153
"spring.jms.listener.maxConcurrency=10");
@@ -156,9 +157,10 @@ public void testJmsListenerContainerFactoryWithCustomSettings() {
156157
jmsListenerContainerFactory.getClass());
157158
DefaultMessageListenerContainer listenerContainer = ((DefaultJmsListenerContainerFactory)
158159
jmsListenerContainerFactory).createListenerContainer(mock(JmsListenerEndpoint.class));
160+
assertEquals(false, listenerContainer.isAutoStartup());
161+
assertEquals(Session.CLIENT_ACKNOWLEDGE, listenerContainer.getSessionAcknowledgeMode());
159162
assertEquals(2, listenerContainer.getConcurrentConsumers());
160163
assertEquals(10, listenerContainer.getMaxConcurrentConsumers());
161-
assertEquals(Session.CLIENT_ACKNOWLEDGE, listenerContainer.getSessionAcknowledgeMode());
162164
}
163165

164166
@Test

spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,7 @@ content into your application; rather pick only the properties that you need.
475475
spring.rabbitmq.password= # login password
476476
spring.rabbitmq.requested-heartbeat= # requested heartbeat timeout, in seconds; zero for none
477477
spring.rabbitmq.listener.acknowledge-mode= # acknowledge mode of container
478+
spring.rabbitmq.listener.auto-startup=true # start the container automatically on startup
478479
spring.rabbitmq.listener.concurrency= # minimum number of consumers
479480
spring.rabbitmq.listener.max-concurrency= # maximum number of consumers
480481
spring.rabbitmq.listener.prefetch= # number of messages to be handled in a single request
@@ -534,6 +535,7 @@ content into your application; rather pick only the properties that you need.
534535
# JMS ({sc-spring-boot-autoconfigure}/jms/JmsProperties.{sc-ext}[JmsProperties])
535536
spring.jms.jndi-name= # JNDI location of a JMS ConnectionFactory
536537
spring.jms.listener.acknowledge-mode= # session acknowledgment mode
538+
spring.jms.listener.auto-startup=true # start the container automatically on startup
537539
spring.jms.listener.concurrency= # minimum number of concurrent consumers
538540
spring.jms.listener.max-concurrency= # maximum number of concurrent consumers
539541
spring.jms.pub-sub-domain= # false for queue (default), true for topic

0 commit comments

Comments
 (0)