0
我有一個從數據庫中讀取並寫入文件的spring批處理程序。數據庫到文件程序查詢
工作是:
<job id="MyTransactionJob" job-repository="jobRepository" incrementer="dynamicJobParameters">
<step id="TransactionfileGenerator">
<tasklet transaction-manager="jobRepository-transactionManager">
<chunk reader="MyItemReader" writer="MyItemWriter" commit-interval="1000" skip-policy="skipPolicy"/>
</tasklet>
<listeners>
<listener ref="MySkipListener"/>
</listeners>
</step>
</job>
產品Reader是:
<beans:bean id="MyItemReader" class="org.springframework.batch.item.database.JdbcCursorItemReader">
<beans:property name="dataSource" ref="jobRepository-dataSource" />
<beans:property name="sql" value="${dbTofileDataReadSQL}"/>
<beans:property name="rowMapper">
<beans:bean class="com.mypackage.MyRowMapper" />
</beans:property>
</beans:bean>
dbTofileDataReadSQL是基於一些條件的一個簡單選擇SQL。所以如果條件不滿足,將返回0行。
項作家是:
<beans:bean id="MyItemWriter" class="com.mypackage.MyDbToFileItemWriter">
<beans:property name="delegate">
<beans:bean class="org.springframework.batch.item.file.FlatFileItemWriter">
<beans:property name="resource" value="file:c:\output.dat" />
<beans:property name="shouldDeleteIfExists" value="true"/>
<beans:property name="lineAggregator">
<beans:bean class="org.springframework.batch.item.file.transform.PassThroughLineAggregator" />
</beans:property>
</beans:bean>
</beans:property>
</beans:bean>
問題是,即使返回的行數爲0的空文件將創建爲作家將始終運行。
是否可以放入一個條件,以便當且僅當至少有一行要寫入時才創建該文件。否則完全跳過ItemWriter部分。
感謝您的閱讀!
可惜塔t'FlatFileItemWriter#state'和'FlatFileItemWriter#resource'都是私有的(我會投票保護或提供公共getter)。否則,可以在'FlatFileItemWriter#close()'中實現「if.state.getPosition()== 0」,然後執行'resource.getFile()。delete();'「。 –