Как настроить токенизаторы в bean-компоненте PatternMatchingCompositeLineMapper для соответствия дате в начале строки

У меня есть пакетное задание Java, которое реализует FlatFileItemReader с PatternMatchingCompositeLineMapper и токенизаторами. Проблема в том, что файл будет иметь следующий формат

123456789~sometest~test-test-1
123456789~sometest~test-2
123456789~sometest~test-test-test-3
123456789~sometest~test-test-4
2017-11-01~4

Я должен быть в состоянии определить нижний колонтитул. У меня есть ключ ввода для "*" для обработки фактических строк. Мой вопрос заключается в том, как настроить ключ ввода для сопоставления с шаблоном для даты в начале строки, чтобы я мог определить нижний колонтитул?

Для справки вот боб сейчас:

<bean name="FileUpdateJobFileReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
    <property name="resource" ref="cashMantasFileUpdateJobFileReaderResource" />
    <property name="lineMapper">
        <bean class="org.springframework.batch.item.file.mapping.PatternMatchingCompositeLineMapper" scope="step">
            <property name="tokenizers">
                <map>
                    <!-- First check if we have a footer because that will be a pass through  -->
                    <entry key="#{stepExecutionContext['FooterBusinessDate']}*" >
                        <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer" scope="step">
                            <property name="delimiter" value="~"/>
                            <property name="names" value="#{stepExecutionContext['MantasFooterColumnNames']}" />
                        </bean>
                    </entry>
                    <!-- Find anything remaining which should be data rows -->
                    <entry key="*">
                        <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer" scope="step">
                            <property name="delimiter" value="~"/>
                            <property name="names" value="#{stepExecutionContext['ColumnNames']}" />
                        </bean>
                    </entry>
                </map>
            </property>
            <property name="fieldSetMappers">
                <map>
                    <!-- Map the footer to a general pass through -->
                    <entry key="#{stepExecutionContext['FooterBusinessDate']}*">
                        <bean class="org.springframework.batch.item.file.mapping.PassThroughFieldSetMapper" scope="step" />
                    </entry>
                    <!-- Map data rows to a model -->
                    <entry key="*">
                        <bean class="com.tdameritrade.ctg.cash.mantas.batch.mapper.MantasFieldSetMapper" scope="step"/>
                    </entry>
                </map>
            </property>
        </bean>
    </property>
</bean>

StepExecutionContext['FooterBusinessDate'] в настоящее время возвращает системную бизнес-дату. Проблема в том, что это происходит около полуночи (несколько раз после), а если после, то дата не совпадает. Если бы я мог сопоставить образец с датой в нижнем колонтитуле, тогда не было бы значения, какая это была дата.

0 ответов

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