Конфигурация Spring Poller интеграции XML с весенней загрузкой

Я работаю над проектом при загрузке Spring, и мне нужно добавить модуль интеграции Spring для опроса файлов из местоположения и запустить Spring Batch для этого файла, чтобы обработать его.

Для этого я использовал интеграцию пружинных партий (ссылка на документ ниже).

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

При весенней загрузке я успешно настроил свой поллер в файле @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 и нашел только ссылку ниже, которая не очень полезна, так как я получаю точно такую ​​же ошибку.

Использование Spring Boot & Spring Integration с конфигурацией на основе базы данных

Атрибут 'fixed-rate' не может появляться в элементе 'int: poller'

Spring boot version, которую я использую, как показано ниже.

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

Spring jar интеграции в библиотеке - Spring -gration-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 и он имеет атрибут с фиксированной задержкой в ​​обработчике. Любые предложения по решению этой проблемы?

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 здесь.

Если это просто ошибка IDE, вы можете проигнорировать ее или настроить свою среду IDE так, чтобы она была "осведомлена о пружине".

Spring находит фактическую схему на пути к классам.

С помощью STS включите "весеннюю природу" в проекте.

Иногда это может происходить из-за отсутствия в файле pom.xml зависимости spring-boot-starter-интеграции и spring-интеграционного файла. Так что проверьте, доступна ли на самом деле зависимость Spring-интеграционного файла в вашем проекте, когда вы используете Spring Integration.

Другие вопросы по тегам