Skip to content

Commit 48edfb9

Browse files
garyrussellartembilan
authored andcommitted
GH-1208: Allow SpEL in all @RabbitListener Props
Resolves #1208 Also polish code for setting consumer arguments. **cherry-pick to 2.2.x**
1 parent 5923d67 commit 48edfb9

File tree

5 files changed

+17
-14
lines changed

5 files changed

+17
-14
lines changed

spring-rabbit/src/main/java/org/springframework/amqp/rabbit/annotation/RabbitListenerAnnotationBeanPostProcessor.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ else if (errorHandler instanceof String) {
438438
}
439439

440440
endpoint.setExclusive(rabbitListener.exclusive());
441-
String priority = resolve(rabbitListener.priority());
441+
String priority = resolveExpressionAsString(rabbitListener.priority(), "priority");
442442
if (StringUtils.hasText(priority)) {
443443
try {
444444
endpoint.setPriority(Integer.valueOf(priority));
@@ -475,7 +475,7 @@ else if (ackMode instanceof AcknowledgeMode) {
475475
}
476476

477477
private void resolveAdmin(MethodRabbitListenerEndpoint endpoint, RabbitListener rabbitListener, Object adminTarget) {
478-
String rabbitAdmin = resolve(rabbitListener.admin());
478+
String rabbitAdmin = resolveExpressionAsString(rabbitListener.admin(), "admin");
479479
if (StringUtils.hasText(rabbitAdmin)) {
480480
Assert.state(this.beanFactory != null, "BeanFactory must be set to resolve RabbitAdmin by bean name");
481481
try {
@@ -494,7 +494,8 @@ private RabbitListenerContainerFactory<?> resolveContainerFactory(RabbitListener
494494
Object factoryTarget, String beanName) {
495495

496496
RabbitListenerContainerFactory<?> factory = null;
497-
String containerFactoryBeanName = resolve(rabbitListener.containerFactory());
497+
String containerFactoryBeanName = resolveExpressionAsString(rabbitListener.containerFactory(),
498+
"containerFactory");
498499
if (StringUtils.hasText(containerFactoryBeanName)) {
499500
assertBeanFactory();
500501
try {
@@ -512,7 +513,7 @@ private RabbitListenerContainerFactory<?> resolveContainerFactory(RabbitListener
512513
private void resolveExecutor(MethodRabbitListenerEndpoint endpoint, RabbitListener rabbitListener,
513514
Object execTarget, String beanName) {
514515

515-
String execBeanName = resolve(rabbitListener.executor());
516+
String execBeanName = resolveExpressionAsString(rabbitListener.executor(), "executor");
516517
if (StringUtils.hasText(execBeanName)) {
517518
assertBeanFactory();
518519
try {
@@ -528,7 +529,7 @@ private void resolveExecutor(MethodRabbitListenerEndpoint endpoint, RabbitListen
528529
private void resolvePostProcessor(MethodRabbitListenerEndpoint endpoint, RabbitListener rabbitListener,
529530
Object target, String beanName) {
530531

531-
String ppBeanName = resolve(rabbitListener.replyPostProcessor());
532+
String ppBeanName = resolveExpressionAsString(rabbitListener.replyPostProcessor(), "replyPostProcessor");
532533
if (StringUtils.hasText(ppBeanName)) {
533534
assertBeanFactory();
534535
try {
@@ -554,7 +555,7 @@ protected String noBeanFoundMessage(Object target, String listenerBeanName, Stri
554555

555556
private String getEndpointId(RabbitListener rabbitListener) {
556557
if (StringUtils.hasText(rabbitListener.id())) {
557-
return resolve(rabbitListener.id());
558+
return resolveExpressionAsString(rabbitListener.id(), "id");
558559
}
559560
else {
560561
return "org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#" + this.counter.getAndIncrement();

spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/AbstractMessageListenerContainer.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -726,8 +726,10 @@ public void setConsumerArguments(Map<String, Object> args) {
726726
* @return the arguments.
727727
* @since 2.0
728728
*/
729-
protected Map<String, Object> getConsumerArguments() {
730-
return this.consumerArgs;
729+
public Map<String, Object> getConsumerArguments() {
730+
synchronized (this.consumersMonitor) {
731+
return new HashMap<>(this.consumerArgs);
732+
}
731733
}
732734

733735
/**

spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/AbstractRabbitListenerEndpoint.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import java.util.ArrayList;
2020
import java.util.Arrays;
2121
import java.util.Collection;
22-
import java.util.HashMap;
2322
import java.util.Map;
2423

2524
import org.springframework.amqp.core.AcknowledgeMode;
@@ -359,7 +358,7 @@ public void setupListenerContainer(MessageListenerContainer listenerContainer) {
359358

360359
container.setExclusive(isExclusive());
361360
if (getPriority() != null) {
362-
Map<String, Object> args = new HashMap<String, Object>();
361+
Map<String, Object> args = container.getConsumerArguments();
363362
args.put("x-priority", getPriority());
364363
container.setConsumerArguments(args);
365364
}

spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/AbstractRabbitAnnotationDrivenTests.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2014-2019 the original author or authors.
2+
* Copyright 2014-2020 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -289,9 +289,10 @@ public void fullHandle(String msg) {
289289
@Component
290290
static class FullConfigurableBean {
291291

292-
@RabbitListener(id = "${rabbit.listener.id}", containerFactory = "${rabbit.listener.containerFactory}",
292+
@RabbitListener(id = "#{'${rabbit.listener.id}'}",
293+
containerFactory = "#{'${rabbit.listener.containerFactory}'}",
293294
queues = {"${rabbit.listener.queue}", "queue2"}, exclusive = true,
294-
priority = "${rabbit.listener.priority}", admin = "${rabbit.listener.admin}")
295+
priority = "#{'${rabbit.listener.priority}'}", admin = "#{'${rabbit.listener.admin}'}")
295296
public void fullHandle(String msg) {
296297

297298
}

spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1091,7 +1091,7 @@ public String multiQueuesConfig(String foo) {
10911091
return foo.toUpperCase() + foo;
10921092
}
10931093

1094-
@RabbitListener(queues = "test.header", group = "testGroup", replyPostProcessor = "echoPrefixHeader")
1094+
@RabbitListener(queues = "test.header", group = "testGroup", replyPostProcessor = "#{'echoPrefixHeader'}")
10951095
public String capitalizeWithHeader(@Payload String content, @Header String prefix) {
10961096
return prefix + content.toUpperCase();
10971097
}

0 commit comments

Comments
 (0)