对于最新的稳定版本,请使用 Spring Integration 6.4.0! |
资源支持
资源入站通道适配器建立在 Spring 的抽象之上,以支持各种实际类型的底层资源(例如文件、URL 或类路径资源)的更大灵活性。
因此,它与文件入站通道适配器类似,但比文件入站通道适配器更通用。Resource
资源入站通道适配器
资源入站通道适配器是一个轮询适配器,它创建一个其有效负载是对象集合的适配器。Message
Resource
Resource
对象根据 attribute 指定的模式进行解析。
然后,已解析对象的集合将作为 中的有效负载发送到适配器的通道。
这是资源入站通道适配器和文件入站通道适配器之间的一个主要区别:后者缓冲对象并为每个 .pattern
Resource
Message
File
File
Message
以下示例显示了一个简单的配置,该配置在 Classpath 上可用的包中查找所有以 'properties' 扩展名结尾的文件,并将它们作为 的有效负载发送到名为 'resultChannel' 的通道:things.thing1
Message
<int:resource-inbound-channel-adapter id="resourceAdapter"
channel="resultChannel"
pattern="classpath:things/thing1/*.properties">
<int:poller fixed-rate="1000"/>
</int:resource-inbound-channel-adapter>
资源入站通道适配器依赖于 strategy 接口来解析提供的模式。
它默认为当前 .
但是,您可以通过设置属性来提供对您自己的 implementation of 的实例的引用,如下例所示:org.springframework.core.io.support.ResourcePatternResolver
ApplicationContext
ResourcePatternResolver
pattern-resolver
<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"/>
您可能有一个使用案例,需要进一步筛选由 .
例如,您可能希望防止已解析的资源再次出现在已解析的资源集合中。
另一方面,您的资源可能会相当频繁地更新,并且您确实希望再次选取它们。
换句话说,定义额外的筛选条件和完全禁用筛选都是有效的用例。
您可以提供自己的 strategy 接口实现,如下例所示:ResourcePatternResolver
org.springframework.integration.util.CollectionFilter
public interface CollectionFilter<T> {
Collection<T> filter(Collection<T> unfilteredElements);
}
它接收一个未筛选元素的集合(在前面的示例中是对象),并返回相同类型的筛选元素的集合。CollectionFilter
Resource
如果使用 XML 定义适配器,但未指定过滤器引用,则资源入站通道适配器将使用 的默认实现。
该默认过滤器的实现类为 .
它会记住在上一个调用中传递的元素,以避免多次返回这些元素。CollectionFilter
org.springframework.integration.util.AcceptOnceCollectionFilter
要注入您自己的 implementation of,请使用 attribute ,如下例所示:CollectionFilter
filter
<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"/>
如果您不需要任何筛选,并且甚至希望禁用默认策略,请为 filter 属性提供一个空值(例如CollectionFilter
filter=""
)