无法使用带有org.springframework.batch.item.file.FlatFileItemWriter的pipe delimeter将数据写入文本文件
当我在控制台中撬动数据时,它正在工作。 但当我试图在输出文本文件中写入数据时,它不起作用,但没有错误。 有谁能帮我解决这个问题吗 下面是我的代码:- Java类: 在文件中写入时应使用它无法使用带有org.springframework.batch.item.file.FlatFileItemWriter的pipe delimeter将数据写入文本文件,spring,spring-batch,Spring,Spring Batch,当我在控制台中撬动数据时,它正在工作。 但当我试图在输出文本文件中写入数据时,它不起作用,但没有错误。 有谁能帮我解决这个问题吗 下面是我的代码:- Java类: 在文件中写入时应使用它 import org.springframework.batch.item.file.transform.FieldExtractor; import com.poc.customer.vo.Person; public class PersonFieldSetExtractor implements Fi
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()};
}
}
import org.springframework.batch.item.file.transform.FieldExtractor;
导入com.poc.customer.vo.Person;
公共类PersonfielSetExtractor实现FieldExtractor{
@凌驾
公共对象[]摘录(个人){
返回新对象[]{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;
}
}
import org.springframework.batch.item.file.mapping.FieldSetMapper;
导入org.springframework.batch.item.file.transform.FieldSet;
导入org.springframework.validation.BindException;
导入com.poc.customer.vo.Person;
公共类PersonFieldSetMapper实现FieldSetMapper{
@凌驾
公共人物映射字段集(字段集字段集)引发BindException{
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));
返回人;
}
}
公共类Person实现了可序列化、可比较的{
@凌驾
公共整数比较(个人arg0){
返回这个.firstName.compareTo(arg0.getFirstName());
}
私有字符串srcId;
私有字符串代码;
私有字符串名;
私有字符串lastName;
私有字符串pincode;
私家弦街;;
公共字符串getSrcId(){
返回srcId;
}
公共void setSrcId(字符串srcId){
this.srcId=srcId;
}
公共字符串getSrcCode(){
返回src代码;
}
public void setSrcCode(字符串srcCode){
this.srcCode=srcCode;
}
公共字符串getFirstName(){
返回名字;
}
public void setFirstName(字符串firstName){
this.firstName=firstName;
}
公共字符串getLastName(){
返回姓氏;
}
public void setLastName(字符串lastName){
this.lastName=lastName;
}
公共字符串getPincode(){
返回pincode;
}
公共无效setPincode(字符串pincode){
this.pincode=pincode;
}
公共字符串getStreet(){
返回街;;
}
公共街道(字符串街){
这条街;
}
}
弹簧配置:-
<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>
您在输出文件中观察到了什么?是空的吗?是否缺少分隔符?是否尝试使用不同的输出资源路径(如文件:c:/out.txt)?是否显示了正确的配置txtFileItemReader
定义了两次(第一次,它缺少一个结束标记)。