2014-07-22 4 views
0

Я использую Spring Integration для выполнения опроса файлов в каталоге. Но я хочу добавить временную метку на имя файла, прежде чем что-либо будет сделано для него и отправлено в весеннюю партию.Как изменить имя файла перед отправкой его в Spring Batch?

Возможно ли это?

ответ

2

Да, вы можете. В основном вы хотите настроить входной канал, процессор/обработчик и выходной канал. Ввод представляет входные файлы. Процессор/обработчик переименовывает файлы, и выход перемещает это в выходной каталог для весенней партии.

Использование spring-integration-examples как мое обращение (и стоит проверить в любом случае):

<?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:integration="http://www.springframework.org/schema/integration" 
    xmlns: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"> 

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/> 

    <file:inbound-channel-adapter id="filesIn" 
            directory="file:${java.io.tmpdir}/spring-integration-samples/input"> 
     <integration:poller id="poller" fixed-delay="5000"/> 
    </file:inbound-channel-adapter> 

    <integration:service-activator input-channel="filesIn" 
            output-channel="filesOut" 
            ref="handler"/> 

    <file:outbound-channel-adapter id="filesOut" 
            directory="file:${java.io.tmpdir}/spring-integration-samples/output" 
            delete-source-files="true"/> 

    <bean id="handler" class="org.springframework.integration.samples.filecopy.Handler"/> 

</beans> 
+0

Кажется, это работает на полпути для меня. Пакетное задание запускается с новым именем файла, но читатель получает старое имя файла. Из-за этого я должен получить ресурс. – samwell

+1

@samwell ... глупый вопрос ... но читатель, возможно, смотрит на неправильную папку? ... Я не могу видеть ваш пакетный конфигуратор, поэтому я должен принимать вещи :) –

+0

Ух ты, я попробовал, чтобы посмотреть на заранее определенный файл. Хотя, когда я меняю его на «file: // # {jobParameters ['input.file.name']}", у меня возникают проблемы, я сделаю еще одно сообщение об этом, я не думаю, что это относится к этому после. – samwell

2

Пример ниже созданный с помощью одного из весенней интеграции samples on github.

Вот тот же самый пример, модифицированный для демонстрации метки времени добавляются к имени выходного файла:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/> 

<file:inbound-channel-adapter id="filesIn" 
           directory="file:${java.io.tmpdir}/spring-integration-samples/input" 
           filename-regex="[a-z]+.txt"> 
    <integration:poller id="poller" fixed-delay="5000"/> 
</file:inbound-channel-adapter> 

<file:file-to-string-transformer input-channel="filesIn" output-channel="strings"/> 

<integration:channel id="strings"/> 

<integration:service-activator input-channel="strings" 
           output-channel="filesOut" 
           ref="handler"/> 

<file:outbound-channel-adapter id="filesOut" directory="file:${java.io.tmpdir}/spring-integration-samples/output" 
    filename-generator-expression="new java.text.SimpleDateFormat('yyyyMMddHHmmssSSS').format(new java.util.Date()) + '.' + headers['file_name']" /> 

<bean id="handler" class="org.springframework.integration.samples.filecopy.Handler"/> 

Наиболее значимая часть из приведенной выше коды заключается в следующем: filename-generator-expression="new java.text.SimpleDateFormat('yyyyMMddHHmmssSSS').format(new java.util.Date()) + '.' + headers['file_name']", который показывает, что с помощью простого выражения SPEL вашего выходной файл имеет желаемое имя.

+0

Спасибо, я также разместил это ниже, но это, похоже, работает на полпути для меня. Пакетное задание запускается с новым именем файла, но читатель получает старое имя файла. Из-за этого я должен получить ресурс. – samwell

+2

Вы задали простой вопрос об изменении имен файлов в Spring Integration без каких-либо других подробностей о конфигурации. Моя попытка решения предполагала несколько вещей. Невозможно предложить дополнительные предложения без каких-либо других подробностей. –

Смежные вопросы