From 67933ab01f91b864d79f0a23526f66d88b3576dc Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Mon, 13 Jul 2015 14:21:18 +0100 Subject: [PATCH] Add boolean flag spring.rabbit.listener.useTransactionManager If set *and* there is a transaction manager in the context, then the listener container created by Spring Boot will use the transaction manager to execute the listeners. Fixes gh-3432 (by virtue of not requiring a JtaTransactionManager any more). --- .../RabbitAnnotationDrivenConfiguration.java | 9 +++++---- .../amqp/RabbitAutoConfiguration.java | 2 +- .../autoconfigure/amqp/RabbitProperties.java | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitAnnotationDrivenConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitAnnotationDrivenConfiguration.java index 61383d5a0cd..ebbf2933ff1 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitAnnotationDrivenConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitAnnotationDrivenConfiguration.java @@ -25,7 +25,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.transaction.jta.JtaTransactionManager; +import org.springframework.transaction.PlatformTransactionManager; /** * Configuration for Spring AMQP annotation driven endpoints. @@ -38,15 +38,16 @@ import org.springframework.transaction.jta.JtaTransactionManager; class RabbitAnnotationDrivenConfiguration { @Autowired(required = false) - private JtaTransactionManager transactionManager; + private PlatformTransactionManager transactionManager; @Bean @ConditionalOnMissingBean(name = "rabbitListenerContainerFactory") public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory( - ConnectionFactory connectionFactory) { + ConnectionFactory connectionFactory, RabbitProperties config) { SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); - if (this.transactionManager != null) { + if (this.transactionManager != null + && config.getListener().isUseTransactionManager()) { factory.setTransactionManager(this.transactionManager); } return factory; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfiguration.java index 5385148cfeb..6fee9ffc4e2 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfiguration.java @@ -91,7 +91,7 @@ public class RabbitAutoConfiguration { @Bean @ConditionalOnMissingBean(RabbitTemplate.class) - public RabbitTemplate rabbitTemplate() { + public RabbitTemplate rabbitTemplate(RabbitProperties config) { return new RabbitTemplate(this.connectionFactory); } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java index 773253d8312..83cabdc7886 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitProperties.java @@ -62,6 +62,12 @@ public class RabbitProperties { */ private String addresses; + private Listener listener = new Listener(); + + public Listener getListener() { + return this.listener; + } + public String getHost() { if (this.addresses == null) { return this.host; @@ -156,4 +162,16 @@ public class RabbitProperties { this.virtualHost = ("".equals(virtualHost) ? "/" : virtualHost); } + public static class Listener { + private boolean useTransactionManager = false; + + public boolean isUseTransactionManager() { + return this.useTransactionManager; + } + + public void setUseTransactionManager(boolean useTransactionManager) { + this.useTransactionManager = useTransactionManager; + } + } + }