Java 春季批量问题

Java 春季批量问题,java,spring,spring-batch,Java,Spring,Spring Batch,我有在我的项目中,我想在固定长度的文件处理数据的要求。数据文件包含一个标题行和多个细节行。标题行包含明细行的汇总和合并信息。e、 g.报告期、报告雇主、总金额等。详细信息行包含每个员工的信息。e、 g.员工供款、供款期限等。将有许多来自不同雇主的数据文件需要由工作处理 <bean id="erLoadFolderReader" class="org.springframework.batch.item.file.MultiResourceItemReader" scope="ste

我有在我的项目中,我想在固定长度的文件处理数据的要求。数据文件包含一个标题行和多个细节行。标题行包含明细行的汇总和合并信息。e、 g.报告期、报告雇主、总金额等。详细信息行包含每个员工的信息。e、 g.员工供款、供款期限等。将有许多来自不同雇主的数据文件需要由工作处理

    <bean id="erLoadFolderReader" class="org.springframework.batch.item.file.MultiResourceItemReader" scope="step">
        <property name="resources" value="#{jobParameters['FILE_NAME']}" />
        <property name="delegate" ref="erLoadFileReader" />
        <property name="saveState" value="false" />
    </bean>

    <bean id ="memberRecordHeaderLineHandler" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordHeaderLineHandler" />
    <bean id="erLoadFileReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
        <property name="saveState" value="false" />
        <property name="resource" value="#{jobParameters['FILE_NAME']}"  /> 
        <property name="linesToSkip" value="1" />
        <property name="skippedLinesCallback">
            <bean class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordHeaderLineHandler">
                <property name="wcReportService" ref="wcReportService" />
                <property name="names" value="empNo,planCode,startDate,endDate,totalEmprContrb,totalEmplContrb,reportType" />
                <property name="headerTokenizer">
                    <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
                        <property name="names" value="organizationCode,planCode,beginDate,endDate,totalEmployerContribution,totaEmployeeContribution,reportingType"></property>
                        <property name="columns" value="1-9,10-17,18-25,26-33,34-48,49-63,64-67" />
                    </bean>
                </property>
            </bean>
        </property>
        <property name="lineMapper">
            <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
                <property name="lineTokenizer">
                    <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
                        <property name="names" value="ssn,firstName,lastName,middleName,birthDateText,genderCode,addressStartDateText,addrLine1,addrLine2,addrLine3,city,state,zip,zipPlus,wagesText,employerContributionText,employeeContributionText,recordType,startDateText,endDateText,serviceCreditDaysText,serviceCreditHoursText,jobClassCode,positionChangeDateText,hireDateText,terminationDateText,notes" />
                        <property name="columns" value="1-9,10-29,30-59,60-79,80-87,88-88,89-96,97-126,127-146,147-166,167-181,182-183,184-188,189-192,193-205,206-214,215-223,224-227,228-235,236-243,244-246,247-251,252-255,256-263,264-271,272-279,280-479" />
                    </bean>
                </property>
                <property name="fieldSetMapper">
                    <bean
                        class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                        <property name="targetType"
                            value="com.htcinc.rs.domain.batch.MemberRecord" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
    <bean id="memberRecordItemWriter" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordItemWriter" />
    <bean id="memberRecordItemProcessor" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordItemProcessor" />

    <batch:job id="erLoadJob">
        <batch:step id="erLoadJob_step1">
            <batch:tasklet>
                <batch:chunk reader="erLoadFolderReader" writer="memberRecordItemWriter" processor="memberRecordItemProcessor" commit-interval="1" />
            </batch:tasklet>
            <batch:listeners>
                <batch:listener ref="memberRecordHeaderLineHandler"/>
            </batch:listeners>          
        </batch:step>
    </batch:job>
</beans>
因此,我创建了一个包含以下Reader&Writer和其他自定义类的作业 A.MultiResourceItemReade读取文件夹中的所有文件。 BFlatFileItemReader读取每个文件。从MultiResourceItemReader委派。 C我跳过第一行并处理LineCallbackHandler D我能够解析标题行并将其转换为报表对象。 E我正在使用DefaultLineMapper和BeanRapperFieldSetMapper解析细节线并转换为MemberRecrod对象

    <bean id="erLoadFolderReader" class="org.springframework.batch.item.file.MultiResourceItemReader" scope="step">
        <property name="resources" value="#{jobParameters['FILE_NAME']}" />
        <property name="delegate" ref="erLoadFileReader" />
        <property name="saveState" value="false" />
    </bean>

    <bean id ="memberRecordHeaderLineHandler" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordHeaderLineHandler" />
    <bean id="erLoadFileReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
        <property name="saveState" value="false" />
        <property name="resource" value="#{jobParameters['FILE_NAME']}"  /> 
        <property name="linesToSkip" value="1" />
        <property name="skippedLinesCallback">
            <bean class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordHeaderLineHandler">
                <property name="wcReportService" ref="wcReportService" />
                <property name="names" value="empNo,planCode,startDate,endDate,totalEmprContrb,totalEmplContrb,reportType" />
                <property name="headerTokenizer">
                    <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
                        <property name="names" value="organizationCode,planCode,beginDate,endDate,totalEmployerContribution,totaEmployeeContribution,reportingType"></property>
                        <property name="columns" value="1-9,10-17,18-25,26-33,34-48,49-63,64-67" />
                    </bean>
                </property>
            </bean>
        </property>
        <property name="lineMapper">
            <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
                <property name="lineTokenizer">
                    <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
                        <property name="names" value="ssn,firstName,lastName,middleName,birthDateText,genderCode,addressStartDateText,addrLine1,addrLine2,addrLine3,city,state,zip,zipPlus,wagesText,employerContributionText,employeeContributionText,recordType,startDateText,endDateText,serviceCreditDaysText,serviceCreditHoursText,jobClassCode,positionChangeDateText,hireDateText,terminationDateText,notes" />
                        <property name="columns" value="1-9,10-29,30-59,60-79,80-87,88-88,89-96,97-126,127-146,147-166,167-181,182-183,184-188,189-192,193-205,206-214,215-223,224-227,228-235,236-243,244-246,247-251,252-255,256-263,264-271,272-279,280-479" />
                    </bean>
                </property>
                <property name="fieldSetMapper">
                    <bean
                        class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                        <property name="targetType"
                            value="com.htcinc.rs.domain.batch.MemberRecord" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
    <bean id="memberRecordItemWriter" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordItemWriter" />
    <bean id="memberRecordItemProcessor" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordItemProcessor" />

    <batch:job id="erLoadJob">
        <batch:step id="erLoadJob_step1">
            <batch:tasklet>
                <batch:chunk reader="erLoadFolderReader" writer="memberRecordItemWriter" processor="memberRecordItemProcessor" commit-interval="1" />
            </batch:tasklet>
            <batch:listeners>
                <batch:listener ref="memberRecordHeaderLineHandler"/>
            </batch:listeners>          
        </batch:step>
    </batch:job>
</beans>
我需要帮助实现以下使用spring批处理

    <bean id="erLoadFolderReader" class="org.springframework.batch.item.file.MultiResourceItemReader" scope="step">
        <property name="resources" value="#{jobParameters['FILE_NAME']}" />
        <property name="delegate" ref="erLoadFileReader" />
        <property name="saveState" value="false" />
    </bean>

    <bean id ="memberRecordHeaderLineHandler" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordHeaderLineHandler" />
    <bean id="erLoadFileReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
        <property name="saveState" value="false" />
        <property name="resource" value="#{jobParameters['FILE_NAME']}"  /> 
        <property name="linesToSkip" value="1" />
        <property name="skippedLinesCallback">
            <bean class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordHeaderLineHandler">
                <property name="wcReportService" ref="wcReportService" />
                <property name="names" value="empNo,planCode,startDate,endDate,totalEmprContrb,totalEmplContrb,reportType" />
                <property name="headerTokenizer">
                    <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
                        <property name="names" value="organizationCode,planCode,beginDate,endDate,totalEmployerContribution,totaEmployeeContribution,reportingType"></property>
                        <property name="columns" value="1-9,10-17,18-25,26-33,34-48,49-63,64-67" />
                    </bean>
                </property>
            </bean>
        </property>
        <property name="lineMapper">
            <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
                <property name="lineTokenizer">
                    <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
                        <property name="names" value="ssn,firstName,lastName,middleName,birthDateText,genderCode,addressStartDateText,addrLine1,addrLine2,addrLine3,city,state,zip,zipPlus,wagesText,employerContributionText,employeeContributionText,recordType,startDateText,endDateText,serviceCreditDaysText,serviceCreditHoursText,jobClassCode,positionChangeDateText,hireDateText,terminationDateText,notes" />
                        <property name="columns" value="1-9,10-29,30-59,60-79,80-87,88-88,89-96,97-126,127-146,147-166,167-181,182-183,184-188,189-192,193-205,206-214,215-223,224-227,228-235,236-243,244-246,247-251,252-255,256-263,264-271,272-279,280-479" />
                    </bean>
                </property>
                <property name="fieldSetMapper">
                    <bean
                        class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                        <property name="targetType"
                            value="com.htcinc.rs.domain.batch.MemberRecord" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
    <bean id="memberRecordItemWriter" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordItemWriter" />
    <bean id="memberRecordItemProcessor" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordItemProcessor" />

    <batch:job id="erLoadJob">
        <batch:step id="erLoadJob_step1">
            <batch:tasklet>
                <batch:chunk reader="erLoadFolderReader" writer="memberRecordItemWriter" processor="memberRecordItemProcessor" commit-interval="1" />
            </batch:tasklet>
            <batch:listeners>
                <batch:listener ref="memberRecordHeaderLineHandler"/>
            </batch:listeners>          
        </batch:step>
    </batch:job>
</beans>
  • 我希望在ItemWriter中为文件夹中处理的每个文件提供一个报表对象。因此,我可以将所有MemberRecord对象[详细信息行]添加到报表对象,并将其保存到DB[我正在使用hibernate for ORM]。我试图通过将报表对象添加到JobExecutionContext并在ItemWriter中访问它来实现这一点。因此,我从MemberRecordHeaderLineHandler类扩展了StepExecutionListenerSupport[这实现了LineCallbackHandler]。和重写beforeStep方法。我能够在beforstep方法中获取JobExecution对象,并将JobExecution对象存储到MemberRecordHeaderLineHandler类中的一个局部变量中。但当控件转到handleLine方法时,JobExecution变量为null。我正在解析标题行并将其转换为handleLine方法中的Report对象。由于JobExecution为null,因此我无法将重新写入对象添加到JobExecutionContext对象。我不确定如何将报表对象传递给ItemWriter。请告诉我如何将值从LineCallBackHandler转换为ItemWriter
  • 我还需要关于如何使用SpringBatch实现以下功能的建议

        <bean id="erLoadFolderReader" class="org.springframework.batch.item.file.MultiResourceItemReader" scope="step">
            <property name="resources" value="#{jobParameters['FILE_NAME']}" />
            <property name="delegate" ref="erLoadFileReader" />
            <property name="saveState" value="false" />
        </bean>
    
        <bean id ="memberRecordHeaderLineHandler" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordHeaderLineHandler" />
        <bean id="erLoadFileReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
            <property name="saveState" value="false" />
            <property name="resource" value="#{jobParameters['FILE_NAME']}"  /> 
            <property name="linesToSkip" value="1" />
            <property name="skippedLinesCallback">
                <bean class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordHeaderLineHandler">
                    <property name="wcReportService" ref="wcReportService" />
                    <property name="names" value="empNo,planCode,startDate,endDate,totalEmprContrb,totalEmplContrb,reportType" />
                    <property name="headerTokenizer">
                        <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
                            <property name="names" value="organizationCode,planCode,beginDate,endDate,totalEmployerContribution,totaEmployeeContribution,reportingType"></property>
                            <property name="columns" value="1-9,10-17,18-25,26-33,34-48,49-63,64-67" />
                        </bean>
                    </property>
                </bean>
            </property>
            <property name="lineMapper">
                <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
                    <property name="lineTokenizer">
                        <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
                            <property name="names" value="ssn,firstName,lastName,middleName,birthDateText,genderCode,addressStartDateText,addrLine1,addrLine2,addrLine3,city,state,zip,zipPlus,wagesText,employerContributionText,employeeContributionText,recordType,startDateText,endDateText,serviceCreditDaysText,serviceCreditHoursText,jobClassCode,positionChangeDateText,hireDateText,terminationDateText,notes" />
                            <property name="columns" value="1-9,10-29,30-59,60-79,80-87,88-88,89-96,97-126,127-146,147-166,167-181,182-183,184-188,189-192,193-205,206-214,215-223,224-227,228-235,236-243,244-246,247-251,252-255,256-263,264-271,272-279,280-479" />
                        </bean>
                    </property>
                    <property name="fieldSetMapper">
                        <bean
                            class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                            <property name="targetType"
                                value="com.htcinc.rs.domain.batch.MemberRecord" />
                        </bean>
                    </property>
                </bean>
            </property>
        </bean>
        <bean id="memberRecordItemWriter" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordItemWriter" />
        <bean id="memberRecordItemProcessor" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordItemProcessor" />
    
        <batch:job id="erLoadJob">
            <batch:step id="erLoadJob_step1">
                <batch:tasklet>
                    <batch:chunk reader="erLoadFolderReader" writer="memberRecordItemWriter" processor="memberRecordItemProcessor" commit-interval="1" />
                </batch:tasklet>
                <batch:listeners>
                    <batch:listener ref="memberRecordHeaderLineHandler"/>
                </batch:listeners>          
            </batch:step>
        </batch:job>
    </beans>
    
  • 目前,我的示例数据文件位于webinf/conf/data文件夹下的一个文件夹中。理想情况下,我希望处理来自FTP位置的所有文件。如何为资源属性指定FTP文件夹位置
  • 成功处理每个文件后,我需要将文件归档到不同的文件夹。如何使用Spring批处理归档文件
  • 如果由于错误的数据格式而出现任何异常,我需要更新数据库中的记录,并将出错的文件移到错误文件夹中。我不希望作业因此错误而停止。我想继续处理其他文件。在这种情况下,如何处理异常
  • 作业xml文件。

        <bean id="erLoadFolderReader" class="org.springframework.batch.item.file.MultiResourceItemReader" scope="step">
            <property name="resources" value="#{jobParameters['FILE_NAME']}" />
            <property name="delegate" ref="erLoadFileReader" />
            <property name="saveState" value="false" />
        </bean>
    
        <bean id ="memberRecordHeaderLineHandler" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordHeaderLineHandler" />
        <bean id="erLoadFileReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
            <property name="saveState" value="false" />
            <property name="resource" value="#{jobParameters['FILE_NAME']}"  /> 
            <property name="linesToSkip" value="1" />
            <property name="skippedLinesCallback">
                <bean class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordHeaderLineHandler">
                    <property name="wcReportService" ref="wcReportService" />
                    <property name="names" value="empNo,planCode,startDate,endDate,totalEmprContrb,totalEmplContrb,reportType" />
                    <property name="headerTokenizer">
                        <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
                            <property name="names" value="organizationCode,planCode,beginDate,endDate,totalEmployerContribution,totaEmployeeContribution,reportingType"></property>
                            <property name="columns" value="1-9,10-17,18-25,26-33,34-48,49-63,64-67" />
                        </bean>
                    </property>
                </bean>
            </property>
            <property name="lineMapper">
                <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
                    <property name="lineTokenizer">
                        <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
                            <property name="names" value="ssn,firstName,lastName,middleName,birthDateText,genderCode,addressStartDateText,addrLine1,addrLine2,addrLine3,city,state,zip,zipPlus,wagesText,employerContributionText,employeeContributionText,recordType,startDateText,endDateText,serviceCreditDaysText,serviceCreditHoursText,jobClassCode,positionChangeDateText,hireDateText,terminationDateText,notes" />
                            <property name="columns" value="1-9,10-29,30-59,60-79,80-87,88-88,89-96,97-126,127-146,147-166,167-181,182-183,184-188,189-192,193-205,206-214,215-223,224-227,228-235,236-243,244-246,247-251,252-255,256-263,264-271,272-279,280-479" />
                        </bean>
                    </property>
                    <property name="fieldSetMapper">
                        <bean
                            class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                            <property name="targetType"
                                value="com.htcinc.rs.domain.batch.MemberRecord" />
                        </bean>
                    </property>
                </bean>
            </property>
        </bean>
        <bean id="memberRecordItemWriter" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordItemWriter" />
        <bean id="memberRecordItemProcessor" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordItemProcessor" />
    
        <batch:job id="erLoadJob">
            <batch:step id="erLoadJob_step1">
                <batch:tasklet>
                    <batch:chunk reader="erLoadFolderReader" writer="memberRecordItemWriter" processor="memberRecordItemProcessor" commit-interval="1" />
                </batch:tasklet>
                <batch:listeners>
                    <batch:listener ref="memberRecordHeaderLineHandler"/>
                </batch:listeners>          
            </batch:step>
        </batch:job>
    </beans>
    
    MemberRecordItemWriter.java文件

        <bean id="erLoadFolderReader" class="org.springframework.batch.item.file.MultiResourceItemReader" scope="step">
            <property name="resources" value="#{jobParameters['FILE_NAME']}" />
            <property name="delegate" ref="erLoadFileReader" />
            <property name="saveState" value="false" />
        </bean>
    
        <bean id ="memberRecordHeaderLineHandler" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordHeaderLineHandler" />
        <bean id="erLoadFileReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
            <property name="saveState" value="false" />
            <property name="resource" value="#{jobParameters['FILE_NAME']}"  /> 
            <property name="linesToSkip" value="1" />
            <property name="skippedLinesCallback">
                <bean class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordHeaderLineHandler">
                    <property name="wcReportService" ref="wcReportService" />
                    <property name="names" value="empNo,planCode,startDate,endDate,totalEmprContrb,totalEmplContrb,reportType" />
                    <property name="headerTokenizer">
                        <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
                            <property name="names" value="organizationCode,planCode,beginDate,endDate,totalEmployerContribution,totaEmployeeContribution,reportingType"></property>
                            <property name="columns" value="1-9,10-17,18-25,26-33,34-48,49-63,64-67" />
                        </bean>
                    </property>
                </bean>
            </property>
            <property name="lineMapper">
                <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
                    <property name="lineTokenizer">
                        <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
                            <property name="names" value="ssn,firstName,lastName,middleName,birthDateText,genderCode,addressStartDateText,addrLine1,addrLine2,addrLine3,city,state,zip,zipPlus,wagesText,employerContributionText,employeeContributionText,recordType,startDateText,endDateText,serviceCreditDaysText,serviceCreditHoursText,jobClassCode,positionChangeDateText,hireDateText,terminationDateText,notes" />
                            <property name="columns" value="1-9,10-29,30-59,60-79,80-87,88-88,89-96,97-126,127-146,147-166,167-181,182-183,184-188,189-192,193-205,206-214,215-223,224-227,228-235,236-243,244-246,247-251,252-255,256-263,264-271,272-279,280-479" />
                        </bean>
                    </property>
                    <property name="fieldSetMapper">
                        <bean
                            class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                            <property name="targetType"
                                value="com.htcinc.rs.domain.batch.MemberRecord" />
                        </bean>
                    </property>
                </bean>
            </property>
        </bean>
        <bean id="memberRecordItemWriter" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordItemWriter" />
        <bean id="memberRecordItemProcessor" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordItemProcessor" />
    
        <batch:job id="erLoadJob">
            <batch:step id="erLoadJob_step1">
                <batch:tasklet>
                    <batch:chunk reader="erLoadFolderReader" writer="memberRecordItemWriter" processor="memberRecordItemProcessor" commit-interval="1" />
                </batch:tasklet>
                <batch:listeners>
                    <batch:listener ref="memberRecordHeaderLineHandler"/>
                </batch:listeners>          
            </batch:step>
        </batch:job>
    </beans>
    
        private int iteration = 0;
        private JobExecution jobExecution;
    
        @Override
        public void write(List<? extends MemberRecord> records) throws Exception {
            System.out.println("Iteration-" + iteration++);
            Object wcReport = jobExecution.getExecutionContext().get("WCREPORT_OBJECT");
            for (MemberRecord mr : records) {
                //System.out.println(header);
                System.out.println(mr.getLastName());
            }       
        }
    
        @BeforeStep
        public void beforeStep(StepExecution stepExecution) {
            this.jobExecution = stepExecution.getJobExecution();
        }
    
    private int迭代=0;
    私人作业执行作业执行;
    @凌驾
    
    public void write(List在处理来自ftp的传入文件,然后进行处理时,您需要集成Spring集成和Spring批处理,以创建基于事件的系统

        <bean id="erLoadFolderReader" class="org.springframework.batch.item.file.MultiResourceItemReader" scope="step">
            <property name="resources" value="#{jobParameters['FILE_NAME']}" />
            <property name="delegate" ref="erLoadFileReader" />
            <property name="saveState" value="false" />
        </bean>
    
        <bean id ="memberRecordHeaderLineHandler" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordHeaderLineHandler" />
        <bean id="erLoadFileReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
            <property name="saveState" value="false" />
            <property name="resource" value="#{jobParameters['FILE_NAME']}"  /> 
            <property name="linesToSkip" value="1" />
            <property name="skippedLinesCallback">
                <bean class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordHeaderLineHandler">
                    <property name="wcReportService" ref="wcReportService" />
                    <property name="names" value="empNo,planCode,startDate,endDate,totalEmprContrb,totalEmplContrb,reportType" />
                    <property name="headerTokenizer">
                        <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
                            <property name="names" value="organizationCode,planCode,beginDate,endDate,totalEmployerContribution,totaEmployeeContribution,reportingType"></property>
                            <property name="columns" value="1-9,10-17,18-25,26-33,34-48,49-63,64-67" />
                        </bean>
                    </property>
                </bean>
            </property>
            <property name="lineMapper">
                <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
                    <property name="lineTokenizer">
                        <bean class="org.springframework.batch.item.file.transform.FixedLengthTokenizer">
                            <property name="names" value="ssn,firstName,lastName,middleName,birthDateText,genderCode,addressStartDateText,addrLine1,addrLine2,addrLine3,city,state,zip,zipPlus,wagesText,employerContributionText,employeeContributionText,recordType,startDateText,endDateText,serviceCreditDaysText,serviceCreditHoursText,jobClassCode,positionChangeDateText,hireDateText,terminationDateText,notes" />
                            <property name="columns" value="1-9,10-29,30-59,60-79,80-87,88-88,89-96,97-126,127-146,147-166,167-181,182-183,184-188,189-192,193-205,206-214,215-223,224-227,228-235,236-243,244-246,247-251,252-255,256-263,264-271,272-279,280-479" />
                        </bean>
                    </property>
                    <property name="fieldSetMapper">
                        <bean
                            class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                            <property name="targetType"
                                value="com.htcinc.rs.domain.batch.MemberRecord" />
                        </bean>
                    </property>
                </bean>
            </property>
        </bean>
        <bean id="memberRecordItemWriter" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordItemWriter" />
        <bean id="memberRecordItemProcessor" class="com.htcinc.rs.batch.infrastructure.erLoadJob.MemberRecordItemProcessor" />
    
        <batch:job id="erLoadJob">
            <batch:step id="erLoadJob_step1">
                <batch:tasklet>
                    <batch:chunk reader="erLoadFolderReader" writer="memberRecordItemWriter" processor="memberRecordItemProcessor" commit-interval="1" />
                </batch:tasklet>
                <batch:listeners>
                    <batch:listener ref="memberRecordHeaderLineHandler"/>
                </batch:listeners>          
            </batch:step>
        </batch:job>
    </beans>
    
  • 配置Spring集成以侦听ftp服务器
  • 一旦检测到传入文件,Spring Integration将运行作业
  • SpringBatch将处理传入文件并将数据保存到数据库中
  • 注意:要添加归档功能,您需要在Spring Batch的JobListener或StepListener上添加它

  • 我的要求和你的类似:处理传入文件,将正确处理的文件移到“成功”目录,将错误文件移到“错误”目录。你是如何实现的?