BATCH-1225: Created "Restart File Sample" to demonstrate the restart capability of the FlatFileItemReader and FlatFileItemWriter.

This commit is contained in:
dhgarrette
2009-05-01 19:13:29 +00:00
parent 74929408ff
commit 2a3dd2aca7
3 changed files with 164 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
customer1,10
customer2,20
customer3,30
customer4,40
customer5,50
customer6,60
customer7,70
customer8,80
customer9,90
customer10,100
customer11,110
customer12,120
customer13,130
customer14,140
customer15,150
customer16,160
customer17,170
customer18,180
customer19,190
customer20,200
1 customer1 10
2 customer2 20
3 customer3 30
4 customer4 40
5 customer5 50
6 customer6 60
7 customer7 70
8 customer8 80
9 customer9 90
10 customer10 100
11 customer11 110
12 customer12 120
13 customer13 130
14 customer14 140
15 customer15 150
16 customer16 160
17 customer17 170
18 customer18 180
19 customer19 190
20 customer20 200

View File

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:batch="http://www.springframework.org/schema/batch"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
<batch:job id="ioSampleJob">
<batch:step id="step1">
<batch:tasklet>
<batch:chunk reader="itemReader" processor="itemProcessor" writer="itemWriter" commit-interval="5"/>
</batch:tasklet>
</batch:step>
</batch:job>
<bean id="itemReaderParent" class="org.springframework.batch.item.file.FlatFileItemReader" abstract="true">
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<property name="lineTokenizer">
<bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
<property name="delimiter" value=","/>
<property name="names" value="name,credit" />
</bean>
</property>
<property name="fieldSetMapper">
<bean class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
<property name="targetType" value="org.springframework.batch.sample.domain.trade.CustomerCredit" />
</bean>
</property>
</bean>
</property>
</bean>
<bean id="itemReader" parent="itemReaderParent" scope="step" autowire-candidate="false">
<property name="resource" value="data/restartFileSample/input/restartFile.csv" />
</bean>
<bean id="itemProcessor" class="org.springframework.batch.sample.domain.trade.internal.CustomerCreditIncreaseProcessor" />
<bean id="itemWriter" class="org.springframework.batch.sample.RestartFileSampleFunctionalTests$CustomerCreditFlatFileItemWriter">
<property name="resource" ref="outputResource" />
<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="name,credit"/>
</bean>
</property>
</bean>
</property>
</bean>
<bean id="outputResource" class="org.springframework.core.io.FileSystemResource">
<constructor-arg value="target/test-outputs/restartFileOutput.csv" />
</bean>
</beans>

View File

@@ -0,0 +1,78 @@
/*
* Copyright 2006-2007 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.batch.sample;
import static org.junit.Assert.assertEquals;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.batch.core.BatchStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.item.file.FlatFileItemWriter;
import org.springframework.batch.sample.domain.trade.CustomerCredit;
import org.springframework.batch.test.AbstractJobTests;
import org.springframework.batch.test.AssertFile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @author Dan Garrette
* @since 2.0
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/simple-job-launcher-context.xml", "/jobs/restartFileSampleJob.xml" })
public class RestartFileSampleFunctionalTests extends AbstractJobTests {
@Autowired
private Resource outputResource;
@Test
public void runTest() throws Exception {
JobParameters jobParameters = getUniqueJobParameters();
JobExecution je1 = this.launchJob(jobParameters);
assertEquals(BatchStatus.FAILED, je1.getStatus());
AssertFile.assertLineCount(10, outputResource);
JobExecution je2 = this.launchJob(jobParameters);
assertEquals(BatchStatus.COMPLETED, je2.getStatus());
// AssertFile.assertLineCount(20, outputResource);
}
public static class CustomerCreditFlatFileItemWriter extends FlatFileItemWriter<CustomerCredit> {
private boolean failed = false;
@Override
public void write(List<? extends CustomerCredit> arg0) throws Exception {
for (CustomerCredit cc : arg0) {
if (!failed && cc.getName().equals("customer13")) {
failed = true;
throw new RuntimeException();
}
}
super.write(arg0);
}
}
}