mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-07-15 01:07:30 +08:00
Alternative fix for Rabbit listener transactions
Never inject a transaction manager (user can create his own "rabbitListenerContainerFactory" bean if he wants an actual non-JTA transaction manager. See gh-3432
This commit is contained in:
parent
67933ab01f
commit
ff79138aa5
@ -20,12 +20,10 @@ import org.springframework.amqp.rabbit.annotation.EnableRabbit;
|
||||
import org.springframework.amqp.rabbit.config.RabbitListenerConfigUtils;
|
||||
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
|
||||
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
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.PlatformTransactionManager;
|
||||
|
||||
/**
|
||||
* Configuration for Spring AMQP annotation driven endpoints.
|
||||
@ -37,19 +35,12 @@ import org.springframework.transaction.PlatformTransactionManager;
|
||||
@ConditionalOnClass(EnableRabbit.class)
|
||||
class RabbitAnnotationDrivenConfiguration {
|
||||
|
||||
@Autowired(required = false)
|
||||
private PlatformTransactionManager transactionManager;
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean(name = "rabbitListenerContainerFactory")
|
||||
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(
|
||||
ConnectionFactory connectionFactory, RabbitProperties config) {
|
||||
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
|
||||
factory.setConnectionFactory(connectionFactory);
|
||||
if (this.transactionManager != null
|
||||
&& config.getListener().isUseTransactionManager()) {
|
||||
factory.setTransactionManager(this.transactionManager);
|
||||
}
|
||||
return factory;
|
||||
}
|
||||
|
||||
|
@ -62,12 +62,6 @@ 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;
|
||||
@ -162,16 +156,4 @@ 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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user