我不确定这是一个错误,或者(更有可能)是我对 spring/XSD 如何工作的误解。
我有这个 xml 定义的rabbitTemplate :
<rabbit:template id="rabbitTemplate"
connection-factory="rabbitConnectionFactory"
mandatory="true"
channel-transacted="true"
message-converter="simpleMessageConverter"
return-callback="rabbitFailedRoutingReturnCallback"/>
不接受最新的属性“return-callback”:
[创建名称为“rabbitTemplate”的 bean 时出错:属性无效 bean 类的“returnCallback” [org.springframework.amqp.rabbit.core.RabbitTemplate]:Bean 属性 “returnCallback”不可写或具有无效的 setter 方法。做过 你的意思是“returnsCallback”?]
按照建议替换为“returns-callback”,尽管它存在于 TemplateParser 中,但不起作用,因为该属性不存在于 最新的 spring-rabbit xsd 中。并且 RabbitTemplate 看起来没有 returnCallback 的设置器(没有 's')。
切换到标准 bean 定义效果很好:
<bean id="rabbitTemplate" class="org.springframework.amqp.rabbit.core.RabbitTemplate">
<property name="connectionFactory" ref="rabbitConnectionFactory" />
<property name="mandatory" value="true" />
<property name="channelTransacted" value="true" />
<property name="messageConverter" ref="simpleMessageConverter" />
<property name="returnsCallback" ref="rabbitFailedRoutingReturnCallback" />
</bean>
另外,查看spring-rabbit template的源代码源代码,看起来不错。所以要么它还没有发布,要么我的发布版本的 错误的 url。
所以,任何人都可以帮我找出这是一个错误还是我的误解?
(由于我仍然对 spring xml 定义和命名空间感到不安,并且通常心不在焉,所以我宁愿在提出问题之前在这里询问)
StackOverflow 上有很多类似的问题。答案是:使用支持 Spring 的 IDE,例如IntelliJ IDEA 或 Spring 工具套件。重点是让您的 IDE 从类路径(本质上是从
spring-rabbit.jar
)解析这些 XSD 文件。这样,它将向您显示您使用的依赖项的版本的实际属性。
returns-callback
正确使用:
NamespaceUtils.setReferenceIfAttributeDefined(builder, element, RETURN_CALLBACK_ATTRIBUTE);
NamespaceUtils.setReferenceIfAttributeDefined(builder, element, RETURNS_CALLBACK_ATTRIBUTE);
第一行是一个错误,因为已弃用的
return-callback
必须映射到 RabbitTemplate.setReturnsCallback()
。
我认为是时候完全删除
return-callback
了,因为四年前它被 returns-callback
取代了。