Add simple integration test for restart using JobLauncher

This commit is contained in:
dsyer
2009-07-07 08:48:59 +00:00
parent e516cbd4a0
commit ee6e6a17b5
4 changed files with 125 additions and 0 deletions

View File

@@ -0,0 +1,76 @@
package org.springframework.batch.core.launch;
import static org.junit.Assert.assertEquals;
import java.util.Calendar;
import javax.sql.DataSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobInstance;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.repository.dao.JdbcJobInstanceDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class JobLauncherIntegrationTests {
private SimpleJdbcTemplate jdbcTemplate;
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job job;
@Autowired
public void setDataSource(DataSource dataSource) {
jdbcTemplate = new SimpleJdbcTemplate(dataSource);
}
@Test
public void testLaunchAndRelaunch() throws Exception {
int before = jdbcTemplate.queryForInt("select count(*) from BATCH_JOB_INSTANCE");
JobExecution jobExecution = launch(true,0);
launch(false, jobExecution.getJobId());
launch(false, jobExecution.getJobId());
int after = jdbcTemplate.queryForInt("select count(*) from BATCH_JOB_INSTANCE");
assertEquals(before+1, after);
}
private JobExecution launch(boolean start, long jobInstanceID) throws Exception {
if (start) {
Calendar c = Calendar.getInstance();
JobParametersBuilder builder = new JobParametersBuilder();
builder.addDate("TIMESTAMP", c.getTime());
return jobLauncher.run(job, builder.toJobParameters());
} else {
JdbcJobInstanceDao dao = new JdbcJobInstanceDao();
dao.setJdbcTemplate(jdbcTemplate);
JobInstance instance = dao.getJobInstance(jobInstanceID);
if (instance != null) {
return jobLauncher.run(job, instance.getJobParameters());
}
return null;
}
}
}

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:batch="http://www.springframework.org/schema/batch"
xsi:schemaLocation="http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<job id="job" xmlns="http://www.springframework.org/schema/batch">
<step id="step"><tasklet ref="tasklet"/></step>
</job>
<job-repository id="jobRepository" xmlns="http://www.springframework.org/schema/batch"/>
<bean id="tasklet" class="org.springframework.batch.core.configuration.xml.FailingTasklet"/>
<bean class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository"/>
</bean>
<bean class="test.jdbc.datasource.DataSourceInitializer">
<property name="dataSource" ref="dataSource" />
<property name="initScripts">
<list>
<value>schema-hsqldb.sql</value>
</list>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver" />
<property name="url" value="jdbc:hsqldb:mem:testdb;sql.enforce_strict_size=true" />
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>