资源支持

资源支持

资源入站通道适配器构建在 Spring 的Resourceabstraction 来支持各种实际类型的底层资源(如文件、URL 或类路径资源)的更大灵活性。 因此,它与文件入站通道适配器类似,但比文件入站通道适配器更通用。spring-doc.cadn.net.cn

资源入站通道适配器

资源入站通道适配器是一个轮询适配器,它创建一个Message其 payload 是Resource对象。spring-doc.cadn.net.cn

Resource对象根据pattern属性。 resolved 的集合Resource对象作为有效负载发送到Message拖动到适配器的通道。 这是资源入站通道适配器和文件入站通道适配器之间的一个主要区别: 后者缓冲区File对象,并发送一个File对象每Message.spring-doc.cadn.net.cn

以下示例显示了一个简单的配置,该配置查找things.thing1package 的 Package,并将它们作为Message添加到名为 'resultChannel' 的通道中:spring-doc.cadn.net.cn

<int:resource-inbound-channel-adapter id="resourceAdapter"
               channel="resultChannel"
               pattern="classpath:things/thing1/*.properties">
    <int:poller fixed-rate="1000"/>
</int:resource-inbound-channel-adapter>

资源入站通道适配器依赖于org.springframework.core.io.support.ResourcePatternResolverstrategy 接口解析提供的模式。 它默认为当前ApplicationContext. 但是,您可以提供对您自己的ResourcePatternResolver通过设置pattern-resolver属性,如下例所示:spring-doc.cadn.net.cn

<int:resource-inbound-channel-adapter id="resourceAdapter"
               channel="resultChannel"
               pattern="classpath:things/thing1/*.properties"
               pattern-resolver="myPatternResolver">
    <int:poller fixed-rate="1000"/>
</int:resource-inbound-channel-adapter>

<bean id="myPatternResolver" class="org.example.MyPatternResolver"/>

您可能有一个用例,需要进一步筛选由ResourcePatternResolver. 例如,您可能希望防止已解析的资源再次出现在已解析的资源集合中。 另一方面,您的资源可能会相当频繁地更新,并且您确实希望再次选取它们。 换句话说,定义额外的筛选条件和完全禁用筛选都是有效的用例。 您可以提供自己的org.springframework.integration.util.CollectionFilterstrategy 接口,如下例所示:spring-doc.cadn.net.cn

public interface CollectionFilter<T> {

    Collection<T> filter(Collection<T> unfilteredElements);

}

CollectionFilter接收一组未过滤的元素(这些元素是Resource对象),并返回相同类型的筛选元素的集合。spring-doc.cadn.net.cn

如果使用 XML 定义适配器,但未指定过滤器引用,则资源入站通道适配器将使用CollectionFilter. 该默认过滤器的实现类为org.springframework.integration.util.AcceptOnceCollectionFilter. 它会记住在上一个调用中传递的元素,以避免多次返回这些元素。spring-doc.cadn.net.cn

要注入您自己的CollectionFilter相反,请使用filter属性,如下例所示:spring-doc.cadn.net.cn

<int:resource-inbound-channel-adapter id="resourceAdapter"
               channel="resultChannel"
               pattern="classpath:things/thing1/*.properties"
               filter="myFilter">
    <int:poller fixed-rate="1000"/>
</int:resource-inbound-channel-adapter>

<bean id="myFilter" class="org.example.MyFilter"/>

如果您不需要任何过滤,并且甚至想禁用默认的CollectionFilter策略,为 filter 属性提供一个空值(例如filter="")spring-doc.cadn.net.cn