Skip to content

Commit 67933ab

Browse files
author
Dave Syer
committed
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).
1 parent f6c395d commit 67933ab

File tree

3 files changed

+24
-5
lines changed

3 files changed

+24
-5
lines changed

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2626
import org.springframework.context.annotation.Bean;
2727
import org.springframework.context.annotation.Configuration;
28-
import org.springframework.transaction.jta.JtaTransactionManager;
28+
import org.springframework.transaction.PlatformTransactionManager;
2929

3030
/**
3131
* Configuration for Spring AMQP annotation driven endpoints.
@@ -38,15 +38,16 @@
3838
class RabbitAnnotationDrivenConfiguration {
3939

4040
@Autowired(required = false)
41-
private JtaTransactionManager transactionManager;
41+
private PlatformTransactionManager transactionManager;
4242

4343
@Bean
4444
@ConditionalOnMissingBean(name = "rabbitListenerContainerFactory")
4545
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(
46-
ConnectionFactory connectionFactory) {
46+
ConnectionFactory connectionFactory, RabbitProperties config) {
4747
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
4848
factory.setConnectionFactory(connectionFactory);
49-
if (this.transactionManager != null) {
49+
if (this.transactionManager != null
50+
&& config.getListener().isUseTransactionManager()) {
5051
factory.setTransactionManager(this.transactionManager);
5152
}
5253
return factory;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public AmqpAdmin amqpAdmin(ConnectionFactory connectionFactory) {
9191

9292
@Bean
9393
@ConditionalOnMissingBean(RabbitTemplate.class)
94-
public RabbitTemplate rabbitTemplate() {
94+
public RabbitTemplate rabbitTemplate(RabbitProperties config) {
9595
return new RabbitTemplate(this.connectionFactory);
9696
}
9797

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ public class RabbitProperties {
6262
*/
6363
private String addresses;
6464

65+
private Listener listener = new Listener();
66+
67+
public Listener getListener() {
68+
return this.listener;
69+
}
70+
6571
public String getHost() {
6672
if (this.addresses == null) {
6773
return this.host;
@@ -156,4 +162,16 @@ public void setVirtualHost(String virtualHost) {
156162
this.virtualHost = ("".equals(virtualHost) ? "/" : virtualHost);
157163
}
158164

165+
public static class Listener {
166+
private boolean useTransactionManager = false;
167+
168+
public boolean isUseTransactionManager() {
169+
return this.useTransactionManager;
170+
}
171+
172+
public void setUseTransactionManager(boolean useTransactionManager) {
173+
this.useTransactionManager = useTransactionManager;
174+
}
175+
}
176+
159177
}

0 commit comments

Comments
 (0)