Spring Batchデータを初期化し、データを空にする方法


この二日間はSpring Batchを使ってデータを導いています。とても強いツールだと思います。インターネットの資料が多くて、連続運行の例が見られませんでした。mkongとspringの公式サイトからコードをいくつか作りましたが、地元で走ってみたらいくつかの問題があります。
1. initialize-databaseは公式のdrop tableを実行して失敗します。
権限問題を報告して、チェックしましたが、spring batchのデータを整理することはできませんでした。
DROP TABLE  BATCH_STEP_EXECUTION_CONTEXT ;
DROP TABLE  BATCH_JOB_EXECUTION_CONTEXT ;
DROP TABLE  BATCH_STEP_EXECUTION ;
DROP TABLE  BATCH_JOB_EXECUTION_PARAMS ;
DROP TABLE  BATCH_JOB_EXECUTION ;
DROP TABLE  BATCH_JOB_INSTANCE ;

DROP TABLE  BATCH_STEP_EXECUTION_SEQ ;
DROP TABLE  BATCH_JOB_EXECUTION_SEQ ;
DROP TABLE  BATCH_JOB_SEQ ;
実は何回も実行していますが、この表はdropを使わないので、これを削除して、由
はローカルスクリプトの を び します。
2.ジョブの に しました。
これは の です。 JobParametersに なるパラメータを してこそ、 に ができます。
HashMap parameters = new HashMap();
parameters.put("currentTime", new JobParameter(System.currentTimeMillis()));
JobExecution execution = jobLauncher.run(job, new JobParameters(parameters));
は の を えて、 しました。
3.2 に を した に、メインキーのエラーを します。
にコピーしていますので、 をしていません。 する にすべての を する があります。しかし、プログラムは も されています。( してください。 です。) は、 だけイテニアゼ-databaseの を します。
を した てのステップはreaderとwriterが です。そこで でReaderとWriterを いて をします。なお、Listenerを く があります。そうでないとずっと し けます。これはカウンターを すためのものです。
jobの

    
    
    
        
    
readerの

    
writerの

    
    
listenerの

    
readerのコード
public class InitReader extends ItemReaderAdapter {
	private int limit = 1;
	private int counter = 0;
	
	public Object read() throws Exception, UnexpectedInputException, ParseException {
		if(counter
writerのコード
public class InitWriter extends ItemWriterAdapter{
	private DriverManagerDataSource dataSource;
	private String sql;
	
	
	public DriverManagerDataSource getDataSource() {
		return dataSource;
	}

	public void setDataSource(DriverManagerDataSource dataSource) {
		this.dataSource = dataSource;
	}

	public String getSql() {
		return sql;
	}

	public void setSql(String sql) {
		this.sql = sql;
	}
	
	public void write(List extends Object> items) throws Exception {
		//System.out.println("init write delete");
		Connection connection = dataSource.getConnection();
		PreparedStatement preparedStatement=connection.prepareStatement(sql);
		preparedStatement.executeUpdate();
		System.out.println("init delete data complete.");
	}
	
	public void afterPropertiesSet() throws Exception {
	    Assert.notNull(dataSource, "dataSource limit must be set");
	    Assert.notNull(sql, "sql limit must be set");
	}
}
listenerのコード
public class InitResettingListener extends StepExecutionListenerSupport implements InitializingBean {

	private InitReader reader;

	public ExitStatus afterStep(StepExecution stepExecution) {
		this.reader.resetCounter();
		return null;
	}

	public void setReader(InitReader reader) {
		this.reader = reader;
	}

	public void afterPropertiesSet() throws Exception {
		Assert.notNull(this.reader, "The 'reader' must be set.");
	}
}
やった!