如何使用Spring Integration将bean的返回值传递给XML属性?最有可能涉及SpEL



我正在学习Spring Integration快速入门教程,一切都很顺利。我看到在变压器中引用了@newline Bean。。。

<int:transformer
    input-channel="tweets"
    expression="payload.fromUser + ' : ' + payload.text + @newline"
    output-channel="files"/>

@Bean
public String newline(){
    return System.getProperty("line.separator");
}

在twitter search-inbound-channel-adapter中,查询属性被设置为#HelloWorld。我希望它能根据Bean的返回值进行动态设置。按照在transformer中所做的类似约定,我尝试将twitter适配器设置为以下内容:

<twitter:search-inbound-channel-adapter 
    id="tweets"
    query="@query"
    twitter-template="twitterTemplate">
    <int:poller fixed-rate="5000"></int:poller>
</twitter:search-inbound-channel-adapter>

然后创建CCD_ 6以获取在执行应用程序时传入的环境变量中定义的查询值。。。

@Bean
public String query(Environment env){
    return env.getProperty("query");
}

一切都设置正确,但twitter搜索表达式实际上是@query,而不是Bean注释方法的返回值。

两个问题。。。1.为什么@newline被解析为Bean引用,而@query不是?2.为了实现这种行为,我需要做什么?

感谢

<int:transformer
    input-channel="tweets"
    expression="payload.fromUser + ' : ' + payload.text + @newline"
    output-channel="files"/>

在字面意义上,这个attributte表达式意味着值是一个表达式,但如下所示不是,所以你应该使用spEL。

<twitter:search-inbound-channel-adapter 
    id="tweets"
    query="#{@query}"
    twitter-template="twitterTemplate">

在Spring Expression Language上进行了一些搜索后,以下是解决方案。

<twitter:search-inbound-channel-adapter 
    id="tweets"
    query="#{@query}"
    twitter-template="twitterTemplate">
    <int:poller fixed-rate="5000"></int:poller>
</twitter:search-inbound-channel-adapter>

最新更新