[英]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.