Я очень новичок в Spring Integration , и мой проект использует File Support для чтения файла и загрузки в базу данных.
У меня есть XML-конфигурация, пытающаяся понять его содержание.
<int-file:inbound-channel-adapter auto-startup= true channel="channelOne" directory="${xx}" filename-regex="${xx}" id="id" prevent-duplicates="false">
<int:poller fixed-delay="1000" receive-timeout="5000"/>
</int-file:inbound-channel-adapter>
<int:channel id="channelOne"/>
Из приведенного выше фрагмента мое понимание:
- Мы определяем канал и
- Затем определите адаптер входящего канала - он будет искать каталог для файла и создаст сообщение с файлом в качестве полезной нагрузки.
Мне удалось преобразовать это в JavaConfig, как показано ниже:
@Bean
public MessageChannel fileInputChannel() {
return new DirectChannel();
}
@Bean
@InboundChannelAdapter(value = "fileInputChannel", poller = @Poller(fixedDelay = "1000"))
public MessageSource<File> fileReadingMessageSource() {
FileReadingMessageSource sourceReader= new FileReadingMessageSource();
RegexPatternFileListFilter regexPatternFileListFilter = new RegexPatternFileListFilter(
file-regex);
//List<FileListFilter<File>> fileListFilter = new ArrayList<FileListFilter<File>>();
fileListFilter.add(regexPatternFileListFilter);
//CompositeFileListFilter compositeFileListFilter = new CompositeFileListFilter<File>(
fileListFilter);
sourceReader.setDirectory(new File(inputDirectorywhereFileComes));
sourceReader.setFilter(regexPatternFileListFilter );
return sourceReader;
}
Затем следующий фрагмент кода, который я буквально изо всех сил пытаюсь понять и, более того, преобразовать в JavaConfig.
Вот следующий кусок:
<int-file:outbound-gateway
delete-source-files="true"
directory="file:${pp}"
id="id"
reply-channel="channelTwo"
request-channel="channelOne"
temporary-file-suffix=".tmp"/>
<int:channel id="channelTwo"/>
<int:outbound-channel-adapter channel="channelTwo" id="id" method="load" ref="beanClass"/>
Итак, из этого куска мое понимание:
1: определить выходной канал.
2: Определите исходящий шлюз, который запишет это сообщение как файл снова в каталог (другой), а также удалите файл из исходного каталога. И, наконец, он вызовет метод Load of Bean Class. Это наш класс и имеет метод load, который принимает файл в качестве входных данных и загружает его в БД.
Я пытался преобразовать его в Java Config. Вот мой код:
@Bean
@ServiceActivator(inputChannel= "fileInputChannel")
public MessageHandler fileWritingMessageHandler() throws IOException, ParseException {
FileWritingMessageHandler handler = new FileWritingMessageHandler(new File(path to output directory));
handler.setFileExistsMode(FileExistsMode.REPLACE);
beaObject.load(new File(path to output directory or input directory:: Nothing Worked));
handler.setDeleteSourceFiles(true);
handler.setOutputChannel(fileOutputChannel());
return handler;
}
Я могу записать этот файл в выходную папку, также удалось удалить из источника. После этого я полностью потерян. Мне нужно вызвать метод Load моего BeanClass (ref = class в XML).
Я много пробовал, но не смог его получить. Прочитайте несколько раз документацию по поддержке файлов интеграции, но не можете это сделать.
Примечание: Когда я попытался, я получил одну ошибку, говорящую об исключении «Файл не найден». Я верю, что могу вызвать свой метод, но не могу получить файл.
Этот XML-конфиг работает отлично.
Spring Integration с DSL также может предложить любой, если возможно.
Пожалуйста, помогите мне понять основной поток и сделать это. Любая помощь и комментарии действительно заметны.
Заранее спасибо.