Spring Batch: FlatFileItem Writer

I configure Spring Batch job which is read some item from database, make some basic process and as result should create csv file:

<batch:job id="testJob" job-repository="jobRepository" parent="jobParent">
    <batch:step id="testStep" allow-start-if-complete="true">
        <batch:tasklet>
            <batch:chunk
                    reader="testReader"
                    processor="testProcessor"
                    writer="testFileItemWriter"
                    commit-interval="1"
            />
        </batch:tasklet>     
    </batch:step>
</batch:job>

<bean id="testReader" ...>

<bean id="testProcessor" ...>

<bean id="testFileItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
    <property name="resource" value="file:test.csv" />
    <property name="lineAggregator">
        <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
            <property name="delimiter" value=", "/>
            <property name="fieldExtractor">
                <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                    <property name="names" value="testId, firstName, lastName, addressLine1, addressLine2, city, stateProvince, postalCode,
                    country" />
                </bean>
            </property>
        </bean>
    </property>
</bean>

But this CSV file is created even when reader get from database 0 items. So as result is created empty CSV file.

How could I make that when reader not found any items in database then not create empty file (not call writer)?

Upvotes: 0

Views: 680

Answers (1)

Amit K Bist
Amit K Bist

Reputation: 6818

In your writer, please add below property, this will delete an empty file if created by writer.

<property name="shouldDeleteIfEmpty" value="true" />

Upvotes: 1

Related Questions