Spring Batch詳細
Job Launcher Job Repositoryと
対応するJavaインターフェースは、それぞれJobLauncherとJobRepositoryである.
JobLauncher.
JobLauncherインターフェースは2つのパラメータを受け入れます.JobとJobParameters
このJob Launcherを呼び出す方法:JavaプログラムによってJobLauncherを介して起動することができます.タイミングタスク、例えばQurtz schedulerによって起動することもできます.
JobRepository
JobRepositoryはJobが実行する関連メタデータを保持しています.JobRepositoryのjavaインターフェースは以下の通りです.
JobRepositoryは、どの時点でどのようなタスクを実行しましたか?タスクの実行結果がどうなりましたか?などのタスク実行の状態情報を格納します.フレームは2つの実装を提供しています.一つはMap形式でメモリに保存し、Javaプログラムが起動されるとジョブ情報がなくなり、分散式で他のノードのタスク実行状況を取得できなくなります.もう一つはデータベースに保存し、下の6つのテーブルに保存します.
BATCHJOB_INSTANCE BATCH_JOB_EXECUTION_PARDAMSBATCHJOB_EXECUTIONBBATCH_STEP_EXECUTIONBBATCH_JOB_EXECUTION_CONTEXTBLATCH_STEP_EXECUTION_CONTEXT
Spring BatchフレームのJobRepositoryは、主流のデータベースをサポートします.DB 2、Derby、H 2、HSQLDB、MySQL、Oracle、PostgreSQL、SQLServer、Syboss.かわいいのは、我が社のGaussデータベースもサポートしています.ただ配置を少し加えるだけです.
各テーブルの解析:http://blog.csdn.net/u011659172/article/details/50749534
jobの起動は通常イベントでトリガされます.JobLauncherインターフェースとJobParameetersクラスをよく使いますが、このイベントはどこからでも利用できます.例えばシステムのタイマーです.httpがウェブコントローラに要求してjobを起動するなど、これはSpring Batchと外部の介入点です.
また、バッチJobプログラムは基本的には各種データを処理するために使われていますので、上の図ではSpringBatchの輸出はすべてデータソースとのやり取りを見られます.これらのデータソースはどんな種類でもいいですが、ファイルシステムとデータベースは一番よく使われています.もちろん、JMSへのメッセージの書き込みもサポートされています.
JobExecution
Job ExecutionはJobが実行するハンドルを表しています.一回のJob実行は成功しても失敗する可能性があります.Job Executionが実行に成功した後にのみ、対応するJob Instanceが完了します.
Job Execution対応データベーステーブルは、BATCH_JOB_EXECUTION、
対応するjava類は、org.springframe ewark.batch.com re.JobExecutionです.
status:Batch Stutsオブジェクトは実行状態を表します.Batch Stuts.STARTEDは実行中に、Batch Status.FAILEは実行に失敗したと表しています.
JobParameeters Incrementerは主にJobOperatorインターフェースのstartNextInstanceなどの方法でjobを起動する場合に用いられます.同じJobがbatch起動後に何度も呼び出された場合、
startNextInstance方法は、JobParameters IncrementerとJobを結合して、新しいインスタンスを作成するために非常に有用であろう.JobParameeters Incrementerにはget Next方法があるからです.
この方法では、異なるJobのインスタンスを区別するために、パラメテックスの自己増加値を追加することができる.
もちろん、この値は他のところでは使われません.ただ違うJobInstanceを示すためです.もちろんSpringBatchフレームもJobParameeters Incremenerの実現タイプRunIdIncremenerを提供してくれました.
@Step Scope
主にSpring Batchに使われます.これは本質的にはlazy scopeで、Springが初めて訪問した時にbeanを作成するということを教えています.この例では、私たちは使いたいです.
Step scopeは、jobパラメータの「filePath」値を使用していますので、この値はアプリケーションの起動時には存在しません.stepscopeを使ってSpringを使う
Batchはこのbeanを作成すると「filePath」の値を見つけることができます.
弾性率:
対応するJavaインターフェースは、それぞれJobLauncherとJobRepositoryである.
JobLauncher.
packageorg.springframework.batch.core.launch;
(...)
publicinterface JobLauncher {
publicJobExecution run(Job job, JobParameters jobParameters)
throwsJobExecutionAlreadyRunningException,
JobRestartException,JobInstanceAlreadyCompleteException,
JobParametersInvalidException;
}
JobLauncherインターフェースは2つのパラメータを受け入れます.JobとJobParameters
このJob Launcherを呼び出す方法:JavaプログラムによってJobLauncherを介して起動することができます.タイミングタスク、例えばQurtz schedulerによって起動することもできます.
JobRepository
JobRepositoryはJobが実行する関連メタデータを保持しています.JobRepositoryのjavaインターフェースは以下の通りです.
packageorg.springframework.batch.core.repository;
(...)
publicinterface JobRepository {
booleanisJobInstanceExists(String jobName, JobParametersjobParameters);
JobExecutioncreateJobExecution(
StringjobName, JobParameters jobParameters)
throwsJobExecutionAlreadyRunningException, JobRestartException,
JobInstanceAlreadyCompleteException;
voidupdate(JobExecution jobExecution);
voidadd(StepExecution stepExecution);
voidupdate(StepExecution stepExecution);
voidupdateExecutionContext(StepExecution stepExecution);
voidupdateExecutionContext(JobExecution jobExecution);
StepExecutiongetLastStepExecution(JobInstance jobInstance,
StringstepName);
intgetStepExecutionCount(JobInstance jobInstance, StringstepName);
JobExecutiongetLastJobExecution(String jobName,
JobParametersjobParameters);
}
JobRepositoryは上記の処理によって提供される恒久化機構であり、JobLauncher、Job、およびStepの例に対してCRUD動作を提供する.JobRepositoryは、どの時点でどのようなタスクを実行しましたか?タスクの実行結果がどうなりましたか?などのタスク実行の状態情報を格納します.フレームは2つの実装を提供しています.一つはMap形式でメモリに保存し、Javaプログラムが起動されるとジョブ情報がなくなり、分散式で他のノードのタスク実行状況を取得できなくなります.もう一つはデータベースに保存し、下の6つのテーブルに保存します.
BATCHJOB_INSTANCE BATCH_JOB_EXECUTION_PARDAMSBATCHJOB_EXECUTIONBBATCH_STEP_EXECUTIONBBATCH_JOB_EXECUTION_CONTEXTBLATCH_STEP_EXECUTION_CONTEXT
Spring BatchフレームのJobRepositoryは、主流のデータベースをサポートします.DB 2、Derby、H 2、HSQLDB、MySQL、Oracle、PostgreSQL、SQLServer、Syboss.かわいいのは、我が社のGaussデータベースもサポートしています.ただ配置を少し加えるだけです.
各テーブルの解析:http://blog.csdn.net/u011659172/article/details/50749534
jobの起動は通常イベントでトリガされます.JobLauncherインターフェースとJobParameetersクラスをよく使いますが、このイベントはどこからでも利用できます.例えばシステムのタイマーです.httpがウェブコントローラに要求してjobを起動するなど、これはSpring Batchと外部の介入点です.
また、バッチJobプログラムは基本的には各種データを処理するために使われていますので、上の図ではSpringBatchの輸出はすべてデータソースとのやり取りを見られます.これらのデータソースはどんな種類でもいいですが、ファイルシステムとデータベースは一番よく使われています.もちろん、JMSへのメッセージの書き込みもサポートされています.
JobExecution
importorg.springframework.batch.core.JobExecution;
jobParameters= new JobParametersBuilder()
.addLong("time",System.currentTimeMillis())
.addString("filePath",smsFilePath)
.toJobParameters();
JobExecutionjobExecution =jobLauncher.run(sms2DBJob,jobParameters);
if(jobExecution.getStatus() ==BatchStatus.COMPLETED) {
returntrue;
}
Job ExecutionはJobが実行するハンドルを表しています.一回のJob実行は成功しても失敗する可能性があります.Job Executionが実行に成功した後にのみ、対応するJob Instanceが完了します.
Job Execution対応データベーステーブルは、BATCH_JOB_EXECUTION、
CREATE TABLEBATCH_JOB_EXECUTION (
JOB_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY ,
VERSION BIGINT ,
JOB_INSTANCE_ID BIGINT NOT NULL,
CREATE_TIME DATETIME NOT NULL,
START_TIME DATETIME DEFAULT NULL ,
END_TIME DATETIME DEFAULT NULL ,
STATUS VARCHAR(10) ,
EXIT_CODE VARCHAR(2500) ,
EXIT_MESSAGE VARCHAR(2500) ,
LAST_UPDATED DATETIME,
JOB_CONFIGURATION_LOCATIONVARCHAR(2500) NULL,
constraint JOB_INST_EXEC_FK foreignkey (JOB_INSTANCE_ID)
referencesBATCH_JOB_INSTANCE(JOB_INSTANCE_ID)
)ENGINE=InnoDB;
対応するjava類は、org.springframe ewark.batch.com re.JobExecutionです.
status:Batch Stutsオブジェクトは実行状態を表します.Batch Stuts.STARTEDは実行中に、Batch Status.FAILEは実行に失敗したと表しています.
JobParameeters Incrementerは主にJobOperatorインターフェースのstartNextInstanceなどの方法でjobを起動する場合に用いられます.同じJobがbatch起動後に何度も呼び出された場合、
startNextInstance方法は、JobParameters IncrementerとJobを結合して、新しいインスタンスを作成するために非常に有用であろう.JobParameeters Incrementerにはget Next方法があるからです.
この方法では、異なるJobのインスタンスを区別するために、パラメテックスの自己増加値を追加することができる.
もちろん、この値は他のところでは使われません.ただ違うJobInstanceを示すためです.もちろんSpringBatchフレームもJobParameeters Incremenerの実現タイプRunIdIncremenerを提供してくれました.
@Bean
publicJob product2DBJob() {
logger.info("product2DBJob");
return productJobBuilderFactory.get("product2DBJob") //create ajobbuilder instance
.incrementer(newRunIdIncrementer())
.repository(jobRepository) .listener(productJobCompletionNotificationListener())
.flow(productStep())
.end()
.build();
------------------------------------------
public Job build() {
FlowJobjob = new FlowJob();
job.setName(getName());
job.setFlow(flow);
super.enhance(job);
try{
job.afterPropertiesSet();
}
catch(Exception e) {
thrownew StepBuilderException(e);
}
returnjob;
}
}
@Step Scope
主にSpring Batchに使われます.これは本質的にはlazy scopeで、Springが初めて訪問した時にbeanを作成するということを教えています.この例では、私たちは使いたいです.
Step scopeは、jobパラメータの「filePath」値を使用していますので、この値はアプリケーションの起動時には存在しません.stepscopeを使ってSpringを使う
Batchはこのbeanを作成すると「filePath」の値を見つけることができます.
弾性率:
@Bean
public Step userStep(){
System.out.println("userStep!!!!!");
return stepBuilderFactory.get("userStep")
.chunk(2)
.reader(userReader(filePath))
.processor(MessageProcessor())
.writer(MessageWriter())
// .faultTolerant()
// .retry(Exception.class)
// .noRetry(ParseException.class)
// .retryLimit(5) 5
// .listener(newRetryFailuireItemListener())
// .skip(Exception.class)
// .skipLimit(10)
// .taskExecutor(newSimpleAsyncTaskExecutor())
// .throttleLimit(10)
// .transactionManager(transactionManager)
.build();
}
/**skip(Exception.class)
* skipLimit(10): Exception , Job
* ----
* retry(Exception.class)
* noRetry(ParseException.class)
* retryLimit(5): , 5 , ParseException
* skiplimit+1, Exception , , skiplimit job
*/