Конфигурация 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:
for the latest schema.
В старой схеме фиксированная скорость была частью периодического дочернего элемента триггера на устройстве опроса.
Схема 4.2 здесь.
Если это просто ошибка IDE, вы можете проигнорировать ее или настроить свою среду IDE так, чтобы она была "осведомлена о пружине".
Spring находит фактическую схему на пути к классам.
С помощью STS включите "весеннюю природу" в проекте.
Иногда это может происходить из-за отсутствия в файле pom.xml зависимости spring-boot-starter-интеграции и spring-интеграционного файла. Так что проверьте, доступна ли на самом деле зависимость Spring-интеграционного файла в вашем проекте, когда вы используете Spring Integration.