簡體   English   中英

Tasklet 在 spring 批處理中刪除表

[英]Tasklet to delete a table in spring batch

我在批處理作業中有一些步驟可以做不同的事情。

但在開始所有這些步驟之前,我需要清理一張桌子。 有沒有什么簡單的方法可以編寫一個直接從作業 xml 文件中刪除表的 tasklet?

我使用 ibatis 作為 ORM

你的意思是比 tasklet 更簡單,例如像這個偽代碼?

<!-- 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;
}
}

用於批處理 Java 配置。 步:

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

小任務:

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

腳本(SQL 服務器):

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";

僅供參考,您可以使用<jdbc:initialize-database>指向一個初始化腳本,其中包含用於初始化數據庫的所有 SQL 查詢,而不是 tasklet。 這樣,查詢將更容易維護。

<!-- xml bean config -->
<jdbc:initialize-database data-source="dataSource">
       <jdbc:script location="file:C:/db/initial-query.sql" />
</jdbc:initialize-database>

請記住將其包含在頂部

<beans xmlns="http://www.springframework.org/schema/beans"
       ...
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xsi:schemaLocation="...
           http://www.springframework.org/schema/jdbc
           http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM