使用org.springframework.batch.item.file.FlatFileItemWriter管道分隔符无法将数据写入文本文件

时间:2015-02-18 07:31:39

标签: spring spring-batch

当我在控制台中使用数据时,它正在运行。 但是当我尝试在输出文本文件中写入数据时,它不起作用但没有错误。 任何人都可以帮我解决这里的问题吗?

贝娄是我的编码: -

Java类:

应该在文件中写入时使用。

import org.springframework.batch.item.file.transform.FieldExtractor;

import com.poc.customer.vo.Person;

public class PersonFieldSetExtractor implements FieldExtractor<Person> {

    @Override
    public Object[] extract(Person person) {

        return new Object[] { person.getSrcId(), person.getSrcCode(),
                person.getFirstName(), person.getLastName(),
                person.getPincode(), person.getStreet()};
    }

}

Java类:    这将在从文件中读取并在bean填充期间使用。

import org.springframework.batch.item.file.mapping.FieldSetMapper;
import org.springframework.batch.item.file.transform.FieldSet;
import org.springframework.validation.BindException;

import com.poc.customer.vo.Person;

public class PersonFieldSetMapper implements FieldSetMapper<Person> {

    @Override
    public Person mapFieldSet(FieldSet fieldSet) throws BindException {

        Person person = new Person();
        person.setSrcId(fieldSet.readString(0));
        person.setSrcCode(fieldSet.readString(1));
        person.setFirstName(fieldSet.readString(2));
        person.setLastName(fieldSet.readString(3));
        person.setPincode(fieldSet.readString(4));
        //person.setStreet(fieldSet.readString(5));

        return person;
    }



}

public class Person implements Serializable, Comparable<Person> {

    @Override
    public int compareTo(Person arg0) {
        return this.firstName.compareTo(arg0.getFirstName());
    }

    private String srcId;
    private String srcCode;
    private String firstName;
    private String lastName;
    private String pincode;
    private String street;
    public String getSrcId() {
        return srcId;
    }
    public void setSrcId(String srcId) {
        this.srcId = srcId;
    }
    public String getSrcCode() {
        return srcCode;
    }
    public void setSrcCode(String srcCode) {
        this.srcCode = srcCode;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getPincode() {
        return pincode;
    }
    public void setPincode(String pincode) {
        this.pincode = pincode;
    }
    public String getStreet() {
        return street;
    }
    public void setStreet(String street) {
        this.street = street;
    }

}

弹簧配置: -

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:batch="http://www.springframework.org/schema/batch" 
    xmlns:task="http://www.springframework.org/schema/task"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/batch
    http://www.springframework.org/schema/batch/spring-batch-2.2.xsd
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">



    <bean id="jobRepository"
        class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
        <property name="transactionManager" ref="transactionManager" />
    </bean>

    <bean id="transactionManager"
        class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />

    <bean id="jobLauncher"
        class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
        <property name="jobRepository" ref="jobRepository" />
    </bean>



  <batch:job id="personJob">
    <batch:step id="step1">
      <batch:tasklet>
        <batch:chunk reader="txtFileItemReader"  writer="txtFileItemWriter" commit-interval="1">
        </batch:chunk>
      </batch:tasklet>
    </batch:step>
  </batch:job>



<bean id="txtFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">


  <bean id="txtFileItemReader" class="com.poc.batch.util.FlatFileReader">
    <!-- Read a csv file -->
    <property name="resource" value="classpath:com/cts/poc/batch/resource/Test_Data.txt" />
    <property name="lineMapper" ref="lineMapper" />
  </bean>

  <bean id="lineMapper" class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
        <property name="fieldSetMapper" ref="fieldSetMapper" />
        <property name="lineTokenizer" ref="lineTokenizer" />
    </bean>


    <bean id="lineTokenizer" class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
        <property name="delimiter" value="|"/>
    </bean>

    <bean id="fieldSetMapper" class="com.poc.batch.util.PersonFieldSetMapper"/>



 <!--  Writer to write output txt file  -->
 <bean id="txtFileItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter">
    <property name="resource" value="file:com/cts/poc/batch/resource/Test_Out_Data.txt" />
    <property name="appendAllowed" value="true" />
    <property name="lineAggregator" ref="lineAggregator"/>
  </bean>


   <bean id="lineAggregator" class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
        <property name="delimiter" value="|" />
        <property name="fieldExtractor" ref="personFieldSetExtractor" />         
    </bean>

    <bean id="personFieldSetExtractor" class="com.poc.batch.util.PersonFieldSetExtractor"/>



</beans>

0 个答案:

没有答案