Spring 集成轮询器 XML 配置 spring 启动

Spring integration poller XML configuration with spring boot

我正在 spring 引导中处理一个项目,我需要添加 Spring 集成轮询器以从某个位置轮询文件,并在该位置上进行 运行 spring 批处理文件进行处理。

我为此使用了 spring 批处理集成(下面的文档参考。)

http://docs.spring.io/spring-batch/trunk/reference/html/springBatchIntegration.html

在 spring 启动时,我已经在 @Configuration 文件中成功配置了我的轮询器,如下所示

@Bean
@InboundChannelAdapter(value = "fileInputChannel", poller = @Poller(
  fixedRate = "1000"), autoStartup = "true")
public MessageSource<File> filesScanner() {
  CompositeFileListFilter<File> filters = new   CompositeFileListFilter<File>();
  filters.addFilter(new   SimplePatternFileListFilter("*.xml"));
  filters.addFilter(new AcceptOnceFileListFilter<File>());
  filters.addFilter(getLastModifiedFileFilter());
  FileReadingMessageSource source = new FileReadingMessageSource();
  source.setDirectory(new File("F:/DataInput/"));
  source.setFilter(filters);
  return source;
}

此轮询器在 java 配置中定义,而通道在 xml 中定义如下。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:int="http://www.springframework.org/schema/integration"
  xmlns:int-file="http://www.springframework.org/schema/integration/file"
  xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/integration
    http://www.springframework.org/schema/integration/spring-integration.xsd
    http://www.springframework.org/schema/integration/file
    http://www.springframework.org/schema/integration/file/spring-integration-file.xsd">
    <int:channel id="ticketingResponse" />
    <int:channel id="mailFailureTicketData" />
    <int:channel id="moveSuccessTicketingFile" />
    <int:channel id="moveFailureTicketingFile" />
    <int:channel id="ticketingFileInput" />
    <int:channel id="ticketingJobParameters" />
    <!-- <int-file:inbound-channel-adapter id="filePoller"
    channel="inboundFileChannel"
    directory="file:/tmp/myfiles/"
    filename-pattern="*.csv">
  <int:poller fixed-rate="1000"/>
</int-file:inbound-channel-adapter> -->
    <bean id="earliestTicketingFileSelecter" class="com.avios.integration.iqcx.FilesSortingComparator" />
    <bean id="compositeFilesFilter"
        class="org.springframework.integration.file.filters.CompositeFileListFilter">
        <constructor-arg>
            <list>
                <bean
                    class="org.springframework.integration.file.filters.RegexPatternFileListFilter">
                    <constructor-arg name="pattern" value="${ticketing.input.file.pattern}" />
                </bean>
                <bean class="org.springframework.integration.file.filters." />
                <bean
                    class="org.springframework.integration.file.filters.LastModifiedFileListFilter">
                    <property name="age" value="${ticketing.input.file.age}" />
                </bean>
            </list>
        </constructor-arg>
    </bean>
    <bean id="ticketingFilesScanner"
    class="org.springframework.integration.file.FileReadingMessageSource">
    <property name="filter" value="compositeFilesFilter" />
    <property name="directory" value="/tmp/myfiles/" />
</bean>
<int-file:inbound-channel-adapter id="filePoller"
    channel="inboundFileChannel"
    directory="file:/tmp/myfiles/"
    filename-pattern="*.csv">
  <int:poller fixed-rate="1000"/>
</int-file:inbound-channel-adapter><!-- <int-file:inbound-channel-adapter
        directory="${ticketing.input.file.path}" channel="ticketingFileInput"
        comparator="earliestTicketingFileSelecter" auto-startup="true" filter="compositeFilesFilter" >
        <int:poller ></int:poller>
        </int-file:inbound-channel-adapter> -->
    <int:transformer id="iqcxFilesToJobParameters" ref="jobParameterTransformer"
        input-channel="ticketingFileInput" method="addTicketingFileToJobParameter"
        output-channel="ticketingJobParameters"  />
    <int:outbound-channel-adapter channel="ticketingJobParameters"
        ref="iqcxJobLaunchingGateway" method="handleMessage" />

</beans>

我的 XML 配置文件中出现以下错误。

cvc-complex-type.3.2.2: 属性 'fixed-rate' 不允许出现在元素 'int:poller'.

我在 google 上检查了这个,只发现下面的 link 这没有多大用处,因为我得到了完全相同的错误。

Attribute 'fixed-rate' is not allowed to appear in element 'int:poller'

Spring我使用的引导版本如下。

    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.6.RELEASE</version>

Spring 库中的集成 jar - Spring-integration-core-4.2.8.RELEASE.jar

我也试过从批处理集成依赖中排除集成 jar 并如下单独添加它,但这也没有用。

    <dependency>
        <groupId>org.springframework.batch</groupId>
        <artifactId>spring-batch-integration</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.integration</groupId>
                <artifactId>spring-integration-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework.integration/spring-integration-core -->
    <dependency>
        <groupId>org.springframework.integration</groupId>
        <artifactId>spring-integration-core</artifactId>
        </dependency>

还检查了 XSD http://www.springframework.org/schema/integration/spring-integration.xsd 并且它在轮询器中具有固定延迟属性。有什么解决这个问题的建议吗?

阅读在线架构中的重要说明:

+++++ IMPORTANT +++++

This schema is for the 1.0 version of Spring Integration Core. We cannot update it to the current schema
 because that will break any applications using 1.0.3 or lower. For subsequent versions, the unversioned
 schema is resolved from the classpath and obtained from the jar.
 Please refer to github:

https://github.com/spring-projects/spring-integration/tree/master/spring-integration-core/src/main/resources/org/springframework/integration/config/xml

for the latest schema. 

在旧架构中,固定速率是轮询器上周期性触发子元素的一部分。

4.2 架构是 here

如果这只是一个 IDE 错误,您可以忽略它,或者将您的 IDE 配置为 "spring aware"。

Spring 在类路径中找到实际模式。

使用 STS,在项目上启用 "spring nature"。

有时可能是由于缺少 spring-boot-starter-integration & spring-integration-file 依赖项 pom.xml。因此,当您使用 spring 集成时,请检查您的项目中是否确实存在 spring-集成文件依赖项。