Chcę utworzyć płaski plik, który ma poniższy format:Wiosna partii: Pisanie nazwy kolumn jako pierwszy wiersz w płaskiej pliku
Col1Name;Col2Name;Col3Name
one;23;20120912
two;28;20120712
Jak widać, pierwszy wiersz w pliku płaskiego są nazwy kolumn.
Jak osiągnąć to poprzez wywołanie zwrotne nagłówka?
widzę, że jeśli plik wejściowy jest powyżej formatu, istnieje opcja, jak poniżej, aby zignorować pierwszy wiersz:
<property name="firstLineIsHeader" value="true"/>
Również ten Jira Issue wskazuje, że to, co chcę jest implemeted i zamknięte. Jednak nie jestem w stanie znaleźć żadnego przykładu pisania pierwszego wiersza jako nazwy kolumn.
<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>
Moja pozycja Writer wygląda jak poniżej:
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);
}
}
Dzięki za czytanie!
Tak, mogę to zrobić. Ale myślałem, że to będzie synonimem twardego kodowania. Zamiast tego, myślałem, że istnieje sposób, aby wyświetlić listę nagłówków bezpośrednio z nazw właściwości fasoli automatycznie. Chcemy więc potwierdzić, że nie ma takiej dostępnej funkcjonalności. Jeśli nie, pójdę w powyższy sposób. – Nik
, aby zminimalizować kodowanie, można ponownie użyć listy nazw atrybutów przy użyciu np. http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/xsd-config.html#xsd-config-body-schemas-util-list –
Dzięki! Zajrzę do tego. Czy możesz sprawdzić moje nowe pytanie - Footer Call Back otrzymuję wezwanie po wezwaniu AfterStep ... – Nik