Tôi muốn tạo ra một tập tin phẳng trong đó có các định dạng dưới đây:mùa xuân hàng loạt: Viết tên cột như dòng đầu tiên trong tập tin phẳng
Col1Name;Col2Name;Col3Name
one;23;20120912
two;28;20120712
Như đã thấy, dòng đầu tiên trong file phẳng là tên cột.
Làm thế nào để đạt được điều này thông qua gọi lại tiêu đề?
Tôi thấy rằng nếu các tập tin đầu vào là các định dạng trên, có là một lựa chọn như dưới đây để bỏ qua dòng đầu tiên:
<property name="firstLineIsHeader" value="true"/>
Ngoài ra, Jira Issue điều này chỉ ra rằng những gì tôi muốn là implemeted và đóng cửa. Tuy nhiên, tôi không thể tìm thấy bất kỳ ví dụ nào để viết dòng đầu tiên dưới dạng tên cột.
<beans:bean id="MyFileItemWriter" class="com.nik.MyFileItemWriter" scope="step">
<beans:property name="delegate">
<beans:bean class="org.springframework.batch.item.file.FlatFileItemWriter">
<beans:property name="resource" value="file:MYFILE.dat" />
<beans:property name="lineAggregator">
<beans:bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
<beans:property name="delimiter" value=";" />
<beans:property name="fieldExtractor">
<beans:bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
<beans:property name="names" value="Col1Name, Col2Name, Col3Name" />
</beans:bean>
</beans:property>
</beans:bean>
</beans:property>
<beans:property name="headerCallback" ref="MyFileItemWriter" />
</beans:bean>
</beans:property>
</beans:bean>
My mục Writer trông như sau:
public class MyFileItemWriter implements ItemWriter<MyBean>, FlatFileHeaderCallback, ItemStream{
private FlatFileItemWriter<MyBean> delegate;
public void setDelegate(final FlatFileItemWriter<MyBean> delegate) {
this.delegate = delegate;
}
public void writeHeader(Writer writer) throws IOException {
}
public void write(List<? extends MyBean> items) throws Exception {
this.delegate.write(items);
}
public void close() throws ItemStreamException {
this.delegate.close();
}
public void open(ExecutionContext arg0) throws ItemStreamException {
this.delegate.open(arg0);
}
public void update(ExecutionContext arg0) throws ItemStreamException {
this.delegate.update(arg0);
}
}
Thanks for reading!
Vâng, tôi có thể làm điều đó. Nhưng tôi nghĩ điều đó sẽ đồng nghĩa với việc viết mã cứng. Thay vào đó, tôi nghĩ rằng sẽ có một cách để liệt kê trực tiếp tiêu đề từ các tên thuộc tính bean một cách tự động. Vì vậy, muốn xác nhận rằng không có chức năng như vậy có sẵn. Nếu không, tôi sẽ đi theo cách trên. – Nik
để giảm thiểu mã hóa cứng, bạn có thể sử dụng lại danh sách tên thuộc tính, ví dụ: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/xsd-config.html#xsd-config-body-schemas-util-list –
Cảm ơn! Sẽ nhìn vào nó. Bạn có thể vui lòng xem câu hỏi mới được đăng bởi tôi - Footer Call Back được gọi sau khi gọi AfterStep ... – Nik