在Spring Integration中将setShouldAppendNewLine添加到FileWritingMessageHandler

时间:2014-12-05 16:30:54

标签: spring spring-integration spring-el

我正在使用Spring Integration 4.1.0。

我有一个用例,我希望生成一个文件,该文件将包含流向某个频道的每条消息的行。

根据"定义集成流程"下面显示的是执行此操作的配置。此链接的一部分:https://spring.io/guides/gs/integration/

<feed:inbound-channel-adapter id="news" url="https://spring.io/blog.atom">
        <int:poller fixed-rate="5000"/>
    </feed:inbound-channel-adapter>

    <int:transformer
            input-channel="news"
            expression="payload.title + ' @ ' + payload.link + '#{systemProperties['line.separator']}'"
            output-channel="file"/>

    <file:outbound-channel-adapter id="file"
            mode="APPEND"
            charset="UTF-8"
            directory="/tmp/si"
            filename-generator-expression="'SpringBlog'"/>

这似乎是一个相当常见的用例(至少在我的团队中肯定是这样)。您需要注意的是CharacterStreamWritingMessageHandler(写入stdoutstderr)会提供此设置器setShouldAppendNewLine(boolean shouldAppendNewLine)。可以在FileWritingMessageHandler上提供类似的设置吗?

可以说,这实际上是变压器的工作(如示例所示),但如果它已经作为CharacterStreamWritingMessageHandler类的设置提供,那么决定将这个特殊的变换器用例组合在该类上,我认为这是使FileWritingMessageHandler行为相似的合理请求。此外,SpEL表达式的运行速度不一定与编译代码一样快(除非我们使用新的spring.expression.compiler.mode=MIXED设置),这将节省一些处理时间,因为不需要变换器步骤。

1 个答案:

答案 0 :(得分:1)

这似乎是对我的合理要求(鉴于流适配器上现有的先例),尤其是在APPEND模式下写作时。

请打开新功能&#39; JIRA Issue

更好的是,考虑contributing

我们通常不会在点发布中(例如4.1.1)在流中进行架构更改,因此必须将XML命名空间支持推迟到4.2。

但是,将该属性添加到类中可以在使用Java @Configuration时设置它,或者在应用程序初始化期间获取对处理程序的引用并进行设置。