我正在学习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>