/** * Use the {@link JobRepository} to create some {@link JobExecution} * instances each with a single step execution. * * @param count the required number of instances of {@link JobExecution} to * create * @return a collection of {@link JobExecution} * @throws JobExecutionAlreadyRunningException thrown if Job is already running. * @throws JobRestartException thrown if Job is not restartable. * @throws JobInstanceAlreadyCompleteException thrown if Job Instance is already complete. */ public List<JobExecution> createJobExecutions(int count) throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException { return createJobExecutions("job", new String[] { "step" }, count); }
/** * Create a {@link JobRepositoryTestUtils} with all its mandatory * properties. * * @param jobRepository a {@link JobRepository} backed by a database * @param dataSource a {@link DataSource} */ public JobRepositoryTestUtils(JobRepository jobRepository, DataSource dataSource) { super(); this.jobRepository = jobRepository; setDataSource(dataSource); }
@Test(expected=IllegalArgumentException.class) public void testMandatoryDataSource() throws Exception { utils = new JobRepositoryTestUtils(); utils.setJobRepository(jobRepository); utils.afterPropertiesSet(); }
@Test public void testRemoveJobExecutionsIncrementally() throws Exception { utils = new JobRepositoryTestUtils(jobRepository, dataSource); List<JobExecution> list1 = utils.createJobExecutions(3); List<JobExecution> list2 = utils.createJobExecutions(2); assertEquals(beforeJobs + 5, JdbcTestUtils.countRowsInTable(jdbcTemplate, "BATCH_JOB_EXECUTION")); utils.removeJobExecutions(list2); assertEquals(beforeJobs + 3, JdbcTestUtils.countRowsInTable(jdbcTemplate, "BATCH_JOB_EXECUTION")); utils.removeJobExecutions(list1); assertEquals(beforeJobs, JdbcTestUtils.countRowsInTable(jdbcTemplate, "BATCH_JOB_EXECUTION")); }
@Test public void testCreateJobExecutionsWithIncrementer() throws Exception { utils = new JobRepositoryTestUtils(jobRepository, dataSource); utils.setJobParametersIncrementer(new JobParametersIncrementer() { @Override public JobParameters getNext(JobParameters parameters) { return new JobParametersBuilder().addString("foo","bar").toJobParameters(); } }); List<JobExecution> list = utils.createJobExecutions(1); assertEquals(1, list.size()); assertEquals("bar", list.get(0).getJobParameters().getString("foo")); utils.removeJobExecutions(list); assertEquals(beforeJobs, JdbcTestUtils.countRowsInTable(jdbcTemplate, "BATCH_JOB_EXECUTION")); } }
@Test(expected=IllegalArgumentException.class) public void testMandatoryProperties() throws Exception { utils = new JobRepositoryTestUtils(); utils.afterPropertiesSet(); }
@Test public void testRemoveJobExecutionsWithSameJobInstance() throws Exception { utils = new JobRepositoryTestUtils(jobRepository, dataSource); List<JobExecution> list = new ArrayList<>(); JobExecution jobExecution = jobRepository.createJobExecution("job", new JobParameters()); jobExecution.setEndTime(new Date()); list.add(jobExecution); jobRepository.update(jobExecution); jobExecution = jobRepository.createJobExecution("job", new JobParameters()); list.add(jobExecution); assertEquals(beforeJobs + 2, JdbcTestUtils.countRowsInTable(jdbcTemplate, "BATCH_JOB_EXECUTION")); utils.removeJobExecutions(list); assertEquals(beforeJobs, JdbcTestUtils.countRowsInTable(jdbcTemplate, "BATCH_JOB_EXECUTION")); }
/** * Remove all the {@link JobExecution} instances, and all associated * {@link JobInstance} and {@link StepExecution} instances from the standard * RDBMS locations used by Spring Batch. * * @throws DataAccessException if there is a problem */ public void removeJobExecutions() throws DataAccessException { jdbcTemplate.update(getQuery("delete from %PREFIX%STEP_EXECUTION_CONTEXT")); jdbcTemplate.update(getQuery("delete from %PREFIX%STEP_EXECUTION")); jdbcTemplate.update(getQuery("delete from %PREFIX%JOB_EXECUTION_CONTEXT")); jdbcTemplate.update(getQuery("delete from %PREFIX%JOB_EXECUTION_PARAMS")); jdbcTemplate.update(getQuery("delete from %PREFIX%JOB_EXECUTION")); jdbcTemplate.update(getQuery("delete from %PREFIX%JOB_INSTANCE")); }
@Before public void setUp() { this.jobRepositoryTestUtils.removeJobExecutions(); }
@Test public void testCreateJobExecutions() throws Exception { utils = new JobRepositoryTestUtils(jobRepository, dataSource); List<JobExecution> list = utils.createJobExecutions(3); assertEquals(3, list.size()); assertEquals(beforeJobs + 3, JdbcTestUtils.countRowsInTable(jdbcTemplate, "BATCH_JOB_EXECUTION")); assertEquals(beforeSteps + 3, JdbcTestUtils.countRowsInTable(jdbcTemplate, "BATCH_STEP_EXECUTION")); utils.removeJobExecutions(list); assertEquals(beforeJobs, JdbcTestUtils.countRowsInTable(jdbcTemplate, "BATCH_JOB_EXECUTION")); assertEquals(beforeSteps, JdbcTestUtils.countRowsInTable(jdbcTemplate, "BATCH_STEP_EXECUTION")); }
for (JobExecution jobExecution : list) { List<Long> stepExecutionIds = jdbcTemplate.query( getQuery("select STEP_EXECUTION_ID from %PREFIX%STEP_EXECUTION where JOB_EXECUTION_ID=?"), new RowMapper<Long>() { @Override jdbcTemplate.update(getQuery("delete from %PREFIX%STEP_EXECUTION_CONTEXT where STEP_EXECUTION_ID=?"), stepExecutionId); jdbcTemplate.update(getQuery("delete from %PREFIX%STEP_EXECUTION where STEP_EXECUTION_ID=?"), stepExecutionId); jdbcTemplate.update(getQuery("delete from %PREFIX%JOB_EXECUTION_CONTEXT where JOB_EXECUTION_ID=?"), jobExecution.getId()); jdbcTemplate.update(getQuery("delete from %PREFIX%JOB_EXECUTION_PARAMS where JOB_EXECUTION_ID=?"), jobExecution .getId()); jdbcTemplate.update(getQuery("delete from %PREFIX%JOB_EXECUTION where JOB_EXECUTION_ID=?"), jobExecution .getId()); jdbcTemplate.update(getQuery("delete from %PREFIX%JOB_INSTANCE where JOB_INSTANCE_ID=?"), jobExecution .getJobId());
@Test public void testCreateJobExecutionsByName() throws Exception { utils = new JobRepositoryTestUtils(jobRepository, dataSource); List<JobExecution> list = utils.createJobExecutions("foo",new String[] {"bar", "spam"}, 3); assertEquals(3, list.size()); assertEquals(beforeJobs + 3, JdbcTestUtils.countRowsInTable(jdbcTemplate, "BATCH_JOB_EXECUTION")); assertEquals(beforeSteps + 6, JdbcTestUtils.countRowsInTable(jdbcTemplate, "BATCH_STEP_EXECUTION")); utils.removeJobExecutions(list); assertEquals(beforeJobs, JdbcTestUtils.countRowsInTable(jdbcTemplate, "BATCH_JOB_EXECUTION")); assertEquals(beforeSteps, JdbcTestUtils.countRowsInTable(jdbcTemplate, "BATCH_STEP_EXECUTION")); }
/** * Create a {@link JobRepositoryTestUtils} with all its mandatory * properties. * * @param jobRepository a {@link JobRepository} backed by a database * @param dataSource a {@link DataSource} */ public JobRepositoryTestUtils(JobRepository jobRepository, DataSource dataSource) { super(); this.jobRepository = jobRepository; setDataSource(dataSource); }