我必须从扩展方法动态传递队列名称。 我遇到异常
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'rabbitmqQueue' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext' - maybe not public or not valid?
at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:217) ~[spring-expression-5.3.22.jar:5.3.22]
at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:104) ~[spring-expression-5.3.22.jar:5.3.22]
at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:91) ~[spring-expression-5.3.22.jar:5.3.22]
at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:112) ~[spring-expression-5.3.22.jar:5.3.22]
at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:273) ~[spring-expression-5.3.22.jar:5.3.22]
at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:167) ~[spring-context-5.3.22.jar:5.3.22]
... 29 common frames omitted
代码:
public abstract class RabbitmqConsumerService {
String rabbitmqQueue;
protected RabbitmqConsumerService(String rabbitmqQueue) {
this.rabbitmqQueue =rabbitmqQueue;
}
/**
* This message is used to consume the message from common interface.
*
* @param message
*/
@RabbitListener(queues = "#{rabbitmqQueue}")
public void consume(String message) {
LoggingUtils.debug(log, "Received Message: {}", message);
}
}
public class NodeHierarchyMessageReceiver<V> extends RabbitmqConsumerService {
@Autowired
NodeHierarchyService nodeHierarchyService;
public NodeHierarchyMessageReceiver(@Value("${mt.message.queue}") String queueName2) {
super(queueName2);
}
@Override
public void consume(String message) {
LoggingUtils.debug(log, "Message got received:{}", message);
} }
SpEL 表达式处理其上下文中的 bean。 所以,你的
rabbitmqQueue
必须是一个 bean 名称,而不是你的类中的属性。
好吧,它仍然可以,但作为一些豆子的吸气剂。
该
queues
属性可以接受属性占位符:queues = "${my.rabbitmqQueue}"