Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tasklet to delete a table in spring batch

I have steps in the batch job that does different things.

But before I begin all these steps, I need to clear a table. Is there any simple way to write a tasklet that will delete the table directly from the job xml file ?

I am using ibatis as ORM

like image 946
user2434 Avatar asked Dec 07 '25 06:12

user2434


2 Answers

you mean even more simple than a tasklet, e.g. like this pseudocode ?

<!-- xml bean config -->
<bean id="deleteTableTaskletStep" class="...">
   <property name="dataSource" ref="dataSource" />
   <property name="sql" value="delete from ..." />
</bean>

// java code
public class DeleteTableTasklet implements Tasklet {

@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
    new JdbcTemplate(this.dataSource).executeQuery(this.sql)
    return RepeatStatus.FINISHED;
}
}
like image 141
Michael Pralow Avatar answered Dec 08 '25 18:12

Michael Pralow


For batch Java config. Step:

@Bean
private Step dropTable() {
  return stepBuilderFactory
    .get("dropTable")
    .transactionManager(transactionManager)
    .tasklet(dropTableTasklet())
    .build();
}

Tasklet:

private Tasklet dropTableTasklet() {
  return (contribution, chunkContext) -> {
    new JdbcTemplate(this.dataSource).execute(DROP_SCRIPT);
    return RepeatStatus.FINISHED;
  };
}

Script (SQL server):

private static final String DROP_SCRIPT = "IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES "
  + "WHERE TABLE_NAME = 'some_table') "
  + "BEGIN "
  + " DROP TABLE some_table "
  + "END";
like image 34
salerokada Avatar answered Dec 08 '25 18:12

salerokada