【问题标题】:Spring integration poller XML configuration with spring boot使用 Spring Boot 的 Spring 集成轮询器 XML 配置
【发布时间】:2017-02-16 21:18:18
【问题描述】:

我正在使用 Spring Boot 开发一个项目,我需要添加 Spring 集成轮询器以从某个位置轮询文件并在该文件上运行 Spring Batch 以对其进行处理。

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

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

在 Spring Boot 中,我已成功在 @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”中。

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

Using Spring Boot & Spring Integration with database backed Configuration

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

我使用的Spring Boot版本如下。

    <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,它在轮询器中具有固定延迟属性。有解决此问题的建议吗?

【问题讨论】:

    标签: java spring spring-integration xml-configuration poller


    【解决方案1】:

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

    【讨论】:

    • 如果这是一个依赖问题,我的基于注释的配置也会失败。但这工作没有任何错误。问题仅在于 XML 配置。同样根据 Gary 的建议,我运行了我的应用程序,但 XML 中仍然存在错误,并且应用程序运行成功。
    • 哦,好吧,我不确定你是否在运行时得到这个。周末我遇到了类似的问题,我试图将现有项目迁移到 Spring Boot。很高兴你能解决它。
    【解决方案2】:

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

    +++++ 重要 +++++

    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 感知”。

    Spring 在类路径中找到实际的架构。

    使用 STS,在项目上启用“春天自然”。

    【讨论】:

    • IDE 是问题所在。我运行我的应用程序时仍然存在 XML 中的错误,并且它也使用 XML 配置成功运行。之前没试过。感谢您的建议。
    • 尝试在 STS4 中启用 Spring 特性:stackoverflow.com/questions/49201689/…,但没有成功。有什么建议? TIA
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 2014-12-06
    • 2021-08-02
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多