Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Åú´¦Àí¿ò¼Üspring batch»ù´¡ÖªÊ¶½éÉÜ
 
×÷ÕߣºtopEngineerray
  1953  次浏览      27
 2021-9-29
 
±à¼­ÍƼö:
±¾ÎÄÊ×ÏȶÔSpring Batch¼Ü¹¹µÄºËÐĸÅÄî½øÐнéÉÜ,Æä´Î½éÉÜchunk ´¦ÀíÁ÷³Ì£¬×îºóÅú´¦Àí²Ù×÷Ö¸ÄÏ£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚCSDN²©Ö÷¡¸topEngineerray¡¹µÄÔ­´´ÎÄÕ£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­¡¢ÍƼö¡£

spring batch¼ò½é

spring batchÊÇspringÌṩµÄÒ»¸öÊý¾Ý´¦Àí¿ò¼Ü¡£ÆóÒµÓòÖеÄÐí¶àÓ¦ÓóÌÐòÐèÒªÅúÁ¿´¦Àí²ÅÄÜÔڹؼüÈÎÎñ»·¾³ÖÐÖ´ÐÐÒµÎñ²Ù×÷¡£ ÕâЩҵÎñÔËÓª°üÀ¨£º

ÎÞÐèÓû§½»»¥¼´¿É×îÓÐЧµØ´¦Àí´óÁ¿ÐÅÏ¢µÄ×Ô¶¯»¯£¬¸´ÔÓ´¦Àí¡£ ÕâЩ²Ù×÷ͨ³£°üÀ¨»ùÓÚʱ¼äµÄʼþ£¨ÀýÈçÔÂÄ©¼ÆË㣬֪ͨ»òͨÐÅ£©¡£

Ôڷdz£´óµÄÊý¾Ý¼¯ÖÐÖØ¸´´¦Àí¸´ÔÓÒµÎñ¹æÔòµÄ¶¨ÆÚÓ¦Óã¨ÀýÈ磬±£ÏÕÀûÒæÈ·¶¨»ò·ÑÂʵ÷Õû£©¡£

¼¯³É´ÓÄÚ²¿ºÍÍⲿϵͳ½ÓÊÕµÄÐÅÏ¢£¬ÕâЩÐÅϢͨ³£ÐèÒªÒÔÊÂÎñ·½Ê½¸ñʽ»¯£¬ÑéÖ¤ºÍ´¦Àíµ½¼Ç¼ϵͳÖС£ Åú´¦ÀíÓÃÓÚÿÌìΪÆóÒµ´¦ÀíÊýÊ®ÒڵĽ»Òס£

Spring BatchÊÇÒ»¸öÇáÁ¿¼¶£¬È«ÃæµÄÅú´¦Àí¿ò¼Ü£¬Ö¼ÔÚ¿ª·¢¶ÔÆóҵϵͳÈÕ³£ÔËÓªÖÁ¹ØÖØÒªµÄÇ¿´óÅú´¦ÀíÓ¦ÓóÌÐò¡£ Spring Batch¹¹½¨ÁËÈËÃÇÆÚÍûµÄSpring FrameworkÌØÐÔ£¨Éú²úÁ¦£¬»ùÓÚPOJOµÄ¿ª·¢·½·¨ºÍÒ»°ãÒ×ÓÃÐÔ£©£¬Í¬Ê±Ê¹¿ª·¢ÈËÔ±¿ÉÒÔÔÚ±ØÒªÊ±ÇáËÉ·ÃÎʺÍÀûÓøü¸ß¼¶µÄÆóÒµ·þÎñ¡£ Spring Batch²»ÊÇÒ»¸öschuedlingµÄ¿ò¼Ü¡£

Spring BatchÌṩÁË¿ÉÖØÓõŦÄÜ£¬ÕâЩ¹¦ÄܶÔÓÚ´¦Àí´óÁ¿µÄÊý¾ÝÖÁ¹ØÖØÒª£¬°üÀ¨¼Ç¼/¸ú×Ù£¬ÊÂÎñ¹ÜÀí£¬×÷Òµ´¦Àíͳ¼Æ£¬×÷ÒµÖØÆô£¬Ìø¹ýºÍ×ÊÔ´¹ÜÀí¡£ Ëü»¹Ìṩ¸ü¸ß¼¶µÄ¼¼Êõ·þÎñºÍ¹¦ÄÜ£¬Í¨¹ýÓÅ»¯ºÍ·ÖÇø¼¼ÊõʵÏÖ¼«¸ßÈÝÁ¿ºÍ¸ßÐÔÄܵÄÅú´¦Àí×÷Òµ¡£ Spring Batch¿ÉÓÃÓÚÁ½ÖÖ¼òµ¥µÄÓÃÀý£¨ÀýÈ罫Îļþ¶ÁÈëÊý¾Ý¿â»òÔËÐд洢¹ý³Ì£©ÒÔ¼°¸´ÔӵĴóÁ¿ÓÃÀý£¨ÀýÈçÔÚÊý¾Ý¿âÖ®¼äÒÆ¶¯´óÁ¿Êý¾Ý£¬×ª»»ËüµÈµÈ£© ÉÏ£©¡£ ´óÅúÁ¿Åú´¦Àí×÷Òµ¿ÉÒԸ߶ȿÉÀ©Õ¹µÄ·½Ê½ÀûÓøÿò¼ÜÀ´´¦Àí´óÁ¿ÐÅÏ¢¡£

Spring Batch¼Ü¹¹½éÉÜ

Ò»¸öµäÐ͵ÄÅú´¦ÀíÓ¦ÓóÌÐò´óÖÂÈçÏ£º

´ÓÊý¾Ý¿â£¬Îļþ»ò¶ÓÁÐÖжÁÈ¡´óÁ¿¼Ç¼¡£

ÒÔijÖÖ·½Ê½´¦ÀíÊý¾Ý¡£

ÒÔÐÞ¸ÄÖ®ºóµÄÐÎʽд»ØÊý¾Ý¡£

Æä¶ÔÓ¦µÄʾÒâͼÈçÏ£º

spring batchµÄÒ»¸ö×ÜÌåµÄ¼Ü¹¹ÈçÏ£º

ÔÚspring batchÖÐÒ»¸öjob¿ÉÒÔ¶¨ÒåºÜ¶àµÄ²½Öèstep£¬ÔÚÿһ¸östepÀïÃæ¿ÉÒÔ¶¨ÒåÆäרÊôµÄItemReaderÓÃÓÚ¶ÁÈ¡Êý¾Ý£¬ItemProcesseorÓÃÓÚ´¦ÀíÊý¾Ý£¬ItemWriterÓÃÓÚдÊý¾Ý£¬¶øÃ¿Ò»¸ö¶¨ÒåµÄjobÔò¶¼ÔÚJobRepositoryÀïÃæ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýJobLauncherÀ´Æô¶¯Ä³Ò»¸öjob¡£

Spring BatchºËÐĸÅÄî½éÉÜ

ÏÂÃæÊÇһЩ¸ÅÄîÊÇSpring batch¿ò¼ÜÖеĺËÐĸÅÄî¡£

ʲôÊÇJob

JobºÍStepÊÇspring batchÖ´ÐÐÅú´¦ÀíÈÎÎñ×îΪºËÐĵÄÁ½¸ö¸ÅÄî¡£

ÆäÖÐJobÊÇÒ»¸ö·â×°Õû¸öÅú´¦Àí¹ý³ÌµÄÒ»¸ö¸ÅÄî¡£JobÔÚspring batchµÄÌåϵµ±ÖÐÖ»ÊÇÒ»¸ö×î¶¥²ãµÄÒ»¸ö³éÏó¸ÅÄÌåÏÖÔÚ´úÂëµ±ÖÐÔòËüÖ»ÊÇÒ»¸ö×îÉϲãµÄ½Ó¿Ú£¬Æä´úÂëÈçÏÂ:


/**
* Batch domain object representing a job. Job is an explicit abstraction
* representing the configuration of a job specified by a developer. It should
* be noted that restart policy is applied to the job as a whole and not to a
* step.
*/
public interface Job {

String getName();
boolean isRestartable();
void execute(JobExecution execution);
JobParametersIncrementer getJobParametersIncrementer();
JobParametersValidator getJobParametersValidator();

}

ÔÚJobÕâ¸ö½Ó¿Úµ±Öж¨ÒåÁËÎå¸ö·½·¨£¬ËüµÄʵÏÖÀàÖ÷ÒªÓÐÁ½ÖÖÀàÐ͵Äjob£¬Ò»¸öÊÇsimplejob£¬ÁíÒ»¸öÊÇflowjob¡£ÔÚspring batchµ±ÖУ¬jobÊÇ×î¶¥²ãµÄ³éÏ󣬳ýjobÖ®ÍâÎÒÃÇ»¹ÓÐJobInstanceÒÔ¼°JobExecutionÕâÁ½¸ö¸ü¼Óµ×²ãµÄ³éÏó¡£

Ò»¸öjobÊÇÎÒÃÇÔËÐеĻù±¾µ¥Î»£¬ËüÄÚ²¿ÓÉstep×é³É¡£job±¾ÖÊÉÏ¿ÉÒÔ¿´³ÉstepµÄÒ»¸öÈÝÆ÷¡£Ò»¸öjob¿ÉÒÔ°´ÕÕÖ¸¶¨µÄÂß¼­Ë³Ðò×éºÏstep£¬²¢ÌṩÁËÎÒÃǸøËùÓÐstepÉèÖÃÏàͬÊôÐԵķ½·¨£¬ÀýÈçһЩʼþ¼àÌý£¬Ìø¹ý²ßÂÔ¡£

Spring BatchÒÔSimpleJobÀàµÄÐÎʽÌṩÁËJob½Ó¿ÚµÄĬÈϼòµ¥ÊµÏÖ£¬ËüÔÚJobÖ®ÉÏ´´½¨ÁËһЩ±ê×¼¹¦ÄÜ¡£Ò»¸öʹÓÃjava configµÄÀý×Ó´úÂëÈçÏ£º

@Bean
public Job footballJob() {
return this.jobBuilderFactory.get("footballJob")
.start(playerLoad())
.next(gameLoad())
.next(playerSummarization())
.end()
.build();
}

Õâ¸öÅäÖõÄÒâ˼ÊÇ£ºÊ×ÏȸøÕâ¸öjobÆðÁËÒ»¸öÃû×Ö½ÐfootballJob£¬½Ó×ÅÖ¸¶¨ÁËÕâ¸öjobµÄÈý¸östep£¬ËûÃÇ·Ö±ðÓÉ·½·¨£¬playerLoad,gameLoad, playerSummarizationʵÏÖ¡£

ʲôÊÇJobInstance

ÎÒÃÇÔÚÉÏÎÄÒѾ­Ìáµ½ÁËJobInstance£¬ËûÊÇJobµÄ¸ü¼Óµ×²ãµÄÒ»¸ö³éÏó£¬ËûµÄ¶¨ÒåÈçÏ£º

public interface JobInstance {
/**
* Get unique id for this JobInstance.
* @return instance id
*/
public long getInstanceId();
/**
* Get job name.
* @return value of 'id' attribute from <job>
*/
public String getJobName();
}

ËûµÄ·½·¨ºÜ¼òµ¥£¬Ò»¸öÊÇ·µ»ØJobµÄid£¬ÁíÒ»¸öÊÇ·µ»ØJobµÄÃû×Ö¡£

JobInstanceÖ¸µÄÊÇjobÔËÐе±ÖУ¬×÷ÒµÖ´Ðйý³Ìµ±ÖеĸÅÄî¡£Instance±¾¾ÍÊÇʵÀýµÄÒâ˼¡£

±ÈÈç˵ÏÖÔÚÓÐÒ»¸öÅú´¦ÀíµÄjob£¬ËüµÄ¹¦ÄÜÊÇÔÚÒ»Ìì½áÊøÊ±Ö´ÐÐÐÐÒ»´Î¡£ÎÒÃǼٶ¨Õâ¸öÅú´¦ÀíjobµÄÃû×ÖΪ'EndOfDay'¡£ÔÚÕâ¸öÇé¿öÏ£¬ÄÇôÿÌì¾Í»áÓÐÒ»¸öÂß¼­ÒâÒåÉϵÄJobInstance, ¶øÎÒÃDZØÐë¼Ç¼jobµÄÿ´ÎÔËÐеÄÇé¿ö¡£

ʲôÊÇJobParameters

ÔÚÉÏÎĵ±ÖÐÎÒÃÇÌáµ½ÁË£¬Í¬Ò»¸öjobÿÌìÔËÐÐÒ»´ÎµÄ»°£¬ÄÇôÿÌì¶¼ÓÐÒ»¸öjobIntsance£¬µ«ËûÃǵÄjob¶¨Òå¶¼ÊÇÒ»ÑùµÄ£¬ÄÇôÎÒÃÇÔõôÀ´Çø±ðÒ»¸öjobµÄ²»Í¬jobinstanceÁË¡£ ²»·ÁÏÈ×ö¸ö²ÂÏ룬ËäÈ»jobinstanceµÄjob¶¨ÒåÒ»Ñù£¬µ«ÊÇËûÃÇÓеĶ«Î÷¾Í²»Ò»Ñù£¬ÀýÈçÔËÐÐʱ¼ä¡£

spring batchÖÐÌṩµÄÓÃÀ´±êʶһ¸öjobinstanceµÄ¶«Î÷ÊÇ£ºJobParameters¡£ JobParameters¶ÔÏó°üº¬Ò»×éÓÃÓÚÆô¶¯Åú´¦Àí×÷ÒµµÄ²ÎÊý£¬Ëü¿ÉÒÔÔÚÔËÐÐÆÚ¼äÓÃÓÚʶ±ð»òÉõÖÁÓÃ×÷²Î¿¼Êý¾Ý¡£ÎÒÃǼÙÉèµÄÔËÐÐʱ¼ä£¬¾Í¿ÉÒÔ×÷Ϊһ¸öJobParameters¡£

ÀýÈç, ÎÒÃÇÇ°ÃæµÄ'EndOfDay'µÄjobÏÖÔÚÒѾ­ÓÐÁËÁ½¸öʵÀý£¬Ò»¸ö²úÉúÓÚ1ÔÂ1ÈÕ£¬ÁíÒ»¸ö²úÉúÓÚ1ÔÂ2ÈÕ£¬ÄÇôÎÒÃǾͿÉÒÔ¶¨ÒåÁ½¸öJobParameter¶ÔÏó£ºÒ»¸öµÄ²ÎÊýÊÇ01-01, ÁíÒ»¸öµÄ²ÎÊýÊÇ01-02¡£ Òò´Ë£¬Ê¶±ðÒ»¸öJobInstanceµÄ·½·¨¿ÉÒÔ¶¨ÒåΪ£º

Òò´Ë£¬ÎÒô¿ÉÒÔͨ¹ýJobparameterÀ´²Ù×÷ÕýÈ·µÄJobInstance

ʲôÊÇJobExecution

JobExecutionÖ¸µÄÊǵ¥´Î³¢ÊÔÔËÐÐÒ»¸öÎÒÃǶ¨ÒåºÃµÄJobµÄ´úÂë²ãÃæµÄ¸ÅÄî¡£ jobµÄÒ»´ÎÖ´ÐпÉÄÜÒÔʧ°ÜÒ²¿ÉÄܳɹ¦¡£Ö»Óе±Ö´Ðгɹ¦Íê³Éʱ£¬¸ø¶¨µÄÓëÖ´ÐÐÏà¶ÔÓ¦µÄJobInstance²ÅÒ²±»ÊÓΪÍê³É¡£

»¹ÊÇÒÔÇ°ÃæÃèÊöµÄEndOfDayµÄjob×÷ΪʾÀý£¬¼ÙÉèµÚÒ»´ÎÔËÐÐ01-01-2019µÄJobInstance½á¹ûÊÇʧ°Ü¡£ ÄÇô´ËʱÈç¹ûʹÓÃÓëµÚÒ»´ÎÔËÐÐÏàͬµÄJobparameter²ÎÊý£¨¼´01-01-2019£©×÷Òµ²ÎÊýÔÙ´ÎÔËÐУ¬ÄÇô¾Í»á´´½¨Ò»¸ö¶ÔÓ¦ÓÚ֮ǰjobInstanceµÄÒ»¸öеÄJobExecutionʵÀý,JobInstanceÈÔȻֻÓÐÒ»¸ö¡£

JobExecutionµÄ½Ó¿Ú¶¨ÒåÈçÏ£º

public interface JobExecution {
/**
* Get unique id for this JobExecution.
* @return execution id
*/
public long getExecutionId();
/**
* Get job name.
* @return value of 'id' attribute from <job>
*/
public String getJobName();
/**
* Get batch status of this execution.
* @return batch status value.
*/
public BatchStatus getBatchStatus();
/**
* Get time execution entered STARTED status.
* @return date (time)
*/
public Date getStartTime();
/**
* Get time execution entered end status: COMPLETED, STOPPED, FAILED
* @return date (time)
*/
public Date getEndTime();
/**
* Get execution exit status.
* @return exit status.
*/
public String getExitStatus();
/**
* Get time execution was created.
* @return date (time)
*/
public Date getCreateTime();
/**
* Get time execution was last updated updated.
* @return date (time)
*/
public Date getLastUpdatedTime();
/**
* Get job parameters for this execution.
* @return job parameters
*/
public Properties getJobParameters();

}

ÿһ¸ö·½·¨µÄ×¢ÊÍÒѾ­½âÊ͵ĺÜÇå³þ£¬ÕâÀï²»ÔÙ¶à×ö½âÊÍ¡£Ö»ÌáÒ»ÏÂBatchStatus£¬JobExecutionµ±ÖÐÌṩÁËÒ»¸ö·½·¨getBatchStatusÓÃÓÚ»ñȡһ¸öjobijһ´ÎÌØµØÖ´ÐеÄÒ»¸ö״̬¡£BatchStatusÊÇÒ»¸ö´ú±íjob״̬µÄö¾ÙÀ࣬Æä¶¨ÒåÈçÏ£º

public enum BatchStatus {STARTING, STARTED, STOPPING,
STOPPED, FAILED, COMPLETED, ABANDONED }

ÕâЩÊôÐÔ¶ÔÓÚÒ»¸öjobµÄÖ´ÐÐÀ´ËµÊǷdz£¹Ø¼üµÄÐÅÏ¢£¬²¢ÇÒspring batch»á½«ËûÃdz־õ½Êý¾Ý¿âµ±ÖÐ. ÔÚʹÓÃSpring batchµÄ¹ý³Ìµ±ÖÐspring batch»á×Ô¶¯´´½¨Ò»Ð©±íÓÃÓڴ洢һЩjobÏà¹ØµÄÐÅÏ¢£¬ÓÃÓÚ´æ´¢JobExecutionµÄ±íΪbatch_job_execution,ÏÂÃæÊÇÒ»¸ö´ÓÊý¾Ý¿âµ±ÖнØÍ¼µÄʵÀý£º

ʲôÊÇStep

ÿһ¸öStep¶ÔÏó¶¼·â×°ÁËÅú´¦Àí×÷ÒµµÄÒ»¸ö¶ÀÁ¢µÄ½×¶Î¡£ ÊÂʵÉÏ£¬Ã¿Ò»¸öJob±¾ÖÊÉ϶¼ÊÇÓÉÒ»¸ö»ò¶à¸ö²½Öè×é³É¡£ ÿһ¸östep°üº¬¶¨ÒåºÍ¿ØÖÆÊµ¼ÊÅú´¦ÀíËùÐèµÄËùÓÐÐÅÏ¢¡£ ÈκÎÌØ¶¨µÄÄÚÈݶ¼ÓɱàдJobµÄ¿ª·¢ÈËÔ±×ÔÐоö¶¨¡£ Ò»¸östep¿ÉÒԷdz£¼òµ¥Ò²¿ÉÒԷdz£¸´ÔÓ¡£ ÀýÈ磬һ¸östepµÄ¹¦ÄÜÊǽ«ÎļþÖеÄÊý¾Ý¼ÓÔØµ½Êý¾Ý¿âÖУ¬ÄÇô»ùÓÚÏÖÔÚspring batchµÄÖ§³ÖÔò¼¸ºõ²»ÐèҪд´úÂë¡£ ¸ü¸´ÔÓµÄstep¿ÉÄܾßÓи´ÔÓµÄÒµÎñÂß¼­£¬ÕâЩÂß¼­×÷Ϊ´¦ÀíµÄÒ»²¿·Ö¡£ ÓëJobÒ»Ñù£¬Step¾ßÓÐÓëJobExecutionÀàËÆµÄStepExecution£¬ÈçÏÂͼËùʾ£º

ʲôÊÇStepExecution

StepExecution±íʾһ´ÎÖ´ÐÐStep, ÿ´ÎÔËÐÐÒ»¸öStepʱ¶¼»á´´½¨Ò»¸öеÄStepExecution£¬ÀàËÆÓÚJobExecution¡£ µ«ÊÇ£¬Ä³¸ö²½Öè¿ÉÄÜÓÉÓÚÆä֮ǰµÄ²½Öèʧ°Ü¶øÎÞ·¨Ö´ÐС£ ÇÒ½öµ±Stepʵ¼ÊÆô¶¯Ê±²Å»á´´½¨StepExecution¡£

Ò»´ÎstepÖ´ÐеÄʵÀýÓÉStepExecutionÀàµÄ¶ÔÏó±íʾ¡£ ÿ¸öStepExecution¶¼°üº¬¶ÔÆäÏàÓ¦²½ÖèµÄÒýÓÃÒÔ¼°JobExecutionºÍÊÂÎñÏà¹ØµÄÊý¾Ý£¬ÀýÈçÌá½»ºÍ»Ø¹ö¼ÆÊýÒÔ¼°¿ªÊ¼ºÍ½áÊøÊ±¼ä¡£ ´ËÍ⣬ÿ¸ö²½ÖèÖ´Ðж¼°üº¬Ò»¸öExecutionContext£¬ÆäÖаüº¬¿ª·¢ÈËÔ±ÐèÒªÔÚÅú´¦ÀíÔËÐÐÖб£ÁôµÄÈκÎÊý¾Ý£¬ÀýÈçÖØÐÂÆô¶¯ËùÐèµÄͳ¼ÆÐÅÏ¢»ò״̬ÐÅÏ¢¡£ÏÂÃæÊÇÒ»¸ö´ÓÊý¾Ý¿âµ±ÖнØÍ¼µÄʵÀý£º

ʲôÊÇExecutionContext

ExecutionContext¼´Ã¿Ò»¸öStepExecution µÄÖ´Ðл·¾³¡£Ëü°üº¬Ò»ÏµÁеļüÖµ¶Ô¡£ÎÒÃÇ¿ÉÒÔÓÃÈçÏ´úÂë»ñÈ¡ExecutionContext

ExecutionContext ecStep = stepExecution.getExecutionContext();
ExecutionContext ecJob = jobExecution.getExecutionContext();

ʲôÊÇJobRepository

JobRepositoryÊÇÒ»¸öÓÃÓÚ½«ÉÏÊöjob£¬stepµÈ¸ÅÄî½øÐг־û¯µÄÒ»¸öÀà¡£ Ëüͬʱ¸øJobºÍStepÒÔ¼°ÏÂÎÄ»áÌáµ½µÄJobLauncherʵÏÖÌṩCRUD²Ù×÷¡£ Ê×´ÎÆô¶¯Jobʱ£¬½«´ÓrepositoryÖлñÈ¡JobExecution£¬²¢ÇÒÔÚÖ´ÐÐÅú´¦ÀíµÄ¹ý³ÌÖУ¬StepExecutionºÍJobExecution½«±»´æ´¢µ½repositoryµ±ÖС£

@EnableBatchProcessing×¢½â¿ÉÒÔΪJobRepositoryÌṩ×Ô¶¯ÅäÖá£

ʲôÊÇJobLauncher

JobLauncherÕâ¸ö½Ó¿ÚµÄ¹¦Äܷdz£¼òµ¥£¬ËüÊÇÓÃÓÚÆô¶¯Ö¸¶¨ÁËJobParametersµÄJob£¬ÎªÊ²Ã´ÕâÀïҪǿµ÷Ö¸¶¨ÁËJobParameter£¬Ô­ÒòÆäʵÎÒÃÇÔÚÇ°ÃæÒѾ­Ìáµ½ÁË£¬jobparameterºÍjobÒ»Æð²ÅÄÜ×é³ÉÒ»´ÎjobµÄÖ´ÐС£ÏÂÃæÊÇ´úÂëʵÀý£º

public interface JobLauncher {

public JobExecution run(Job job, JobParameters jobParameters)
throws JobExecutionAlreadyRunningException, JobRestartException,
JobInstanceAlreadyCompleteException, JobParametersInvalidException;
}

ÉÏÃærun·½·¨ÊµÏֵŦÄÜÊǸù¾Ý´«ÈëµÄjobÒÔ¼°jobparamaters´ÓJobRepository»ñȡһ¸öJobExecution²¢Ö´ÐÐJob¡£

ʲôÊÇItem Reader

ItemReaderÊÇÒ»¸ö¶ÁÊý¾ÝµÄ³éÏó£¬ËüµÄ¹¦ÄÜÊÇΪÿһ¸öStepÌṩÊý¾ÝÊäÈë¡£ µ±ItemReaderÒÔ¼°¶ÁÍêËùÓÐÊý¾Ýʱ£¬Ëü»á·µ»ØnullÀ´¸æËߺóÐø²Ù×÷Êý¾ÝÒѾ­¶ÁÍê¡£Spring BatchΪItemReaderÌṩÁ˷dz£¶àµÄÓÐÓõÄʵÏÖÀ࣬±ÈÈçJdbcPagingItemReader£¬JdbcCursorItemReaderµÈµÈ¡£

ItemReaderÖ§³ÖµÄ¶ÁÈëµÄÊý¾ÝÔ´Ò²ÊǷdz£·á¸»µÄ£¬°üÀ¨¸÷ÖÖÀàÐ͵ÄÊý¾Ý¿â£¬Îļþ£¬Êý¾ÝÁ÷£¬µÈµÈ¡£¼¸ºõº­¸ÇÁËÎÒÃǵÄËùÓг¡¾°¡£

ÏÂÃæÊÇÒ»¸öJdbcPagingItemReaderµÄÀý×Ó´úÂ룺

@Bean
public JdbcPagingItemReader itemReader(DataSource dataSource, PagingQueryProvider queryProvider) {
Map<String, Object> parameterValues = new HashMap<>();
parameterValues.put("status", "NEW");

return new JdbcPagingItemReaderBuilder<CustomerCredit>()
.name("creditReader")
.dataSource(dataSource)
.queryProvider(queryProvider)
.parameterValues(parameterValues)
.rowMapper(customerCreditMapper())
.pageSize(1000)
.build();
}

@Bean
public SqlPagingQueryProviderFactoryBean queryProvider() {
SqlPagingQueryProviderFactoryBean provider = new SqlPagingQueryProviderFactoryBean();

provider.setSelectClause("select id, name, credit");
provider.setFromClause("from customer");
provider.setWhereClause("where status=:status");
provider.setSortKey("id");

return provider;
}

JdbcPagingItemReader±ØÐëÖ¸¶¨Ò»¸öPagingQueryProvider£¬¸ºÔðÌṩSQL²éѯÓï¾äÀ´°´·ÖÒ³·µ»ØÊý¾Ý¡£

ÏÂÃæÊÇÒ»¸öJdbcCursorItemReaderµÄÀý×Ó´úÂë:

private JdbcCursorItemReader<Map<String, Object>> buildItemReader(final DataSource dataSource, String tableName,
String tenant) {

JdbcCursorItemReader<Map<String, Object>> itemReader = new JdbcCursorItemReader<>();
itemReader.setDataSource(dataSource);
itemReader.setSql("sql here");
itemReader.setRowMapper(new RowMapper());
return itemReader;
}

ʲôÊÇItem Writer

¼ÈÈ»ItemReaderÊǶÁÊý¾ÝµÄÒ»¸ö³éÏó£¬ÄÇôItemWriter×ÔÈ»¾ÍÊÇÒ»¸öдÊý¾ÝµÄ³éÏó£¬ËüÊÇΪÿһ¸östepÌṩÊý¾Ýд³öµÄ¹¦ÄÜ¡£Ð´µÄµ¥Î»ÊÇ¿ÉÒÔÅäÖõģ¬ÎÒÃÇ¿ÉÒÔÒ»´ÎдһÌõÊý¾Ý£¬Ò²¿ÉÒÔÒ»´Îдһ¸öchunkµÄÊý¾Ý£¬¹ØÓÚchunkÏÂÎÄ»áÓÐרÃŵĽéÉÜ¡£ItemWriter¶ÔÓÚ¶ÁÈëµÄÊý¾ÝÊDz»ÄÜ×öÈκβÙ×÷µÄ¡£

Spring BatchΪItemWriterÒ²ÌṩÁ˷dz£¶àµÄÓÐÓõÄʵÏÖÀ࣬µ±È»ÎÒÃÇÒ²¿ÉÒÔȥʵÏÖ×Ô¼ºµÄwriter¹¦ÄÜ¡£

ʲôÊÇItem Processor

ItemProcessor¶ÔÏîÄ¿µÄÒµÎñÂß¼­´¦ÀíµÄÒ»¸ö³éÏó, µ±ItemReader¶ÁÈ¡µ½Ò»Ìõ¼Ç¼֮ºó£¬ItemWriter»¹Î´Ð´ÈëÕâÌõ¼Ç¼֮ǰ£¬IÎÒÃÇ¿ÉÒÔ½èÖútemProcessorÌṩһ¸ö´¦ÀíÒµÎñÂß¼­µÄ¹¦ÄÜ£¬²¢¶ÔÊý¾Ý½øÐÐÏàÓ¦²Ù×÷¡£Èç¹ûÎÒÃÇÔÚItemProcessor·¢ÏÖÒ»ÌõÊý¾Ý²»Ó¦¸Ã±»Ð´È룬¿ÉÒÔͨ¹ý·µ»ØnullÀ´±íʾ¡£ItemProcessorºÍItemReaderÒÔ¼°ItemWriter¿ÉÒԷdz£ºÃµÄ½áºÏÔÚÒ»Æð¹¤×÷£¬ËûÃÇÖ®¼äµÄÊý¾Ý´«ÊäÒ²·Ç³£·½±ã¡£ÎÒÃÇÖ±½ÓʹÓü´¿É¡£

chunk ´¦ÀíÁ÷³Ì

spring batchÌṩÁËÈÃÎÒÃǰ´ÕÕchunk´¦ÀíÊý¾ÝµÄÄÜÁ¦£¬Ò»¸öchunkµÄʾÒâͼÈçÏ£º

ËüµÄÒâ˼¾ÍºÍͼʾµÄÒ»Ñù£¬ÓÉÓÚÎÒÃÇÒ»´ÎbatchµÄÈÎÎñ¿ÉÄÜ»áÓкܶàµÄÊý¾Ý¶Áд²Ù×÷£¬Òò´ËÒ»ÌõÒ»ÌõµÄ´¦Àí²¢ÏòÊý¾Ý¿âÌá½»µÄ»°Ð§Âʲ»»áºÜ¸ß£¬Òò´Ëspring batchÌṩÁËchunkÕâ¸ö¸ÅÄÎÒÃÇ¿ÉÒÔÉ趨һ¸öchunk size£¬spring batch ½«Ò»ÌõÒ»Ìõ´¦ÀíÊý¾Ý£¬µ«²»Ìá½»µ½Êý¾Ý¿â£¬Ö»Óе±´¦ÀíµÄÊý¾ÝÊýÁ¿´ïµ½chunk sizeÉ趨µÄÖµµÃʱºò£¬²ÅÒ»ÆðÈ¥commit.

javaµÄʵÀý¶¨Òå´úÂëÈçÏ£º

ÔÚÉÏÃæÕâ¸östepÀïÃæ£¬chunk size±»ÉèΪÁË10£¬µ±ItemReader¶ÁµÄÊý¾ÝÊýÁ¿´ïµ½10µÄʱºò£¬ÕâÒ»Åú´ÎµÄÊý¾Ý¾ÍÒ»Æð±»´«µ½itemWriter£¬Í¬Ê±transaction±»Ìá½»¡£

skip²ßÂÔºÍʧ°Ü´¦Àí

Ò»¸öbatchµÄjobµÄstep£¬¿ÉÄܻᴦÀí·Ç³£´óÊýÁ¿µÄÊý¾Ý£¬ÄÑÃâ»áÓöµ½³ö´íµÄÇé¿ö£¬³ö´íµÄÇé¿öËä³öÏֵĸÅÂʽÏС£¬µ«ÊÇÎÒÃDz»µÃ²»¿¼ÂÇÕâЩÇé¿ö£¬ÒòΪÎÒÃÇ×öÊý¾ÝÇ¨ÒÆ×îÖØÒªµÄÊÇÒª±£Ö¤Êý¾ÝµÄ×îÖÕÒ»ÖÂÐÔ¡£spring batchµ±È»Ò²¿¼Âǵ½ÁËÕâÖÖÇé¿ö£¬²¢ÇÒΪÎÒÃÇÌṩÁËÏà¹ØµÄ¼¼ÊõÖ§³Ö£¬Çë¿´ÈçÏÂbeanµÄÅäÖãº

ÎÒÃÇÐèÒªÁôÒâÕâÈý¸ö·½·¨£¬·Ö±ðÊÇskipLimit(),skip(),noSkip(),

skipLimit·½·¨µÄÒâ˼ÊÇÎÒÃÇ¿ÉÒÔÉ趨һ¸öÎÒÃÇÔÊÐíµÄÕâ¸östep¿ÉÒÔÌø¹ýµÄÒì³£ÊýÁ¿£¬¼ÙÈçÎÒÃÇÉ趨Ϊ10£¬Ôòµ±Õâ¸östepÔËÐÐʱ£¬Ö»Òª³öÏÖµÄÒì³£ÊýÄ¿²»³¬¹ý10£¬Õû¸östep¶¼²»»áfail¡£×¢Ò⣬Èô²»É趨skipLimit£¬ÔòÆäĬÈÏÖµÊÇ0.

skip·½·¨ÎÒÃÇ¿ÉÒÔÖ¸¶¨ÎÒÃÇ¿ÉÒÔÌø¹ýµÄÒì³££¬ÒòΪÓÐЩÒì³£µÄ³öÏÖ£¬ÎÒÃÇÊÇ¿ÉÒÔºöÂԵġ£

noSkip·½·¨µÄÒâ˼ÔòÊÇÖ¸³öÏÖÕâ¸öÒì³£ÎÒÃDz»ÏëÌø¹ý£¬Ò²¾ÍÊÇ´ÓskipµÄËùÒÔexceptionµ±ÖÐÅųýÕâ¸öexception£¬´ÓÉÏÃæµÄÀý×ÓÀ´Ëµ£¬Ò²¾ÍÊÇÌø¹ýËùÓгýFileNotFoundExceptionµÄexception¡£ÄÇô¶ÔÓÚÕâ¸östepÀ´Ëµ£¬FileNotFoundException¾ÍÊÇÒ»¸öfatalµÄexception£¬Å׳öÕâ¸öexceptionµÄʱºòstep¾Í»áÖ±½Ófail

Åú´¦Àí²Ù×÷Ö¸ÄÏ

±¾²¿·ÖÊÇһЩʹÓÃspring batchʱµÄÖµµÃ×¢ÒâµÄµã

Åú´¦ÀíÔ­Ôò

ÔÚ¹¹½¨Åú´¦Àí½â¾ö·½°¸Ê±£¬Ó¦¿¼ÂÇÒÔϹؼüÔ­ÔòºÍ×¢ÒâÊÂÏî¡£

Åú´¦ÀíÌåϵ½á¹¹Í¨³£»áÓ°ÏìÌåϵ½á¹¹

¾¡¿ÉÄܼò»¯²¢±ÜÃâÔÚµ¥ÅúÓ¦ÓóÌÐòÖй¹½¨¸´ÔÓµÄÂß¼­½á¹¹

±£³ÖÊý¾ÝµÄ´¦ÀíºÍ´æ´¢ÔÚÎïÀíÉÏ¿¿µÃºÜ½ü£¨»»¾ä»°Ëµ£¬½«Êý¾Ý±£´æÔÚ´¦Àí¹ý³ÌÖУ©¡£

×î´óÏ޶ȵؼõÉÙϵͳ×ÊÔ´µÄʹÓã¬ÓÈÆäÊÇI / O. ÔÚinternal memoryÖÐÖ´Ðо¡¿ÉÄܶàµÄ²Ù×÷¡£

²é¿´Ó¦ÓóÌÐòI / O£¨·ÖÎöSQLÓï¾ä£©ÒÔÈ·±£±ÜÃâ²»±ØÒªµÄÎïÀíI / O. ÌØ±ðÊÇ£¬ÐèҪѰÕÒÒÔÏÂËĸö³£¼ûȱÏÝ£º

µ±Êý¾Ý¿ÉÒÔ±»¶Áȡһ´Î²¢»º´æ»ò±£´æÔÚ¹¤×÷´æ´¢ÖÐʱ£¬¶Áȡÿ¸öÊÂÎñµÄÊý¾Ý¡£

ÖØÐ¶ÁÈ¡ÏÈǰÔÚͬһÊÂÎñÖжÁÈ¡Êý¾ÝµÄÊÂÎñµÄÊý¾Ý¡£

µ¼Ö²»±ØÒªµÄ±í»òË÷ÒýɨÃè¡£

δÔÚSQLÓï¾äµÄWHERE×Ó¾äÖÐÖ¸¶¨¼üÖµ¡£

ÔÚÅú´¦ÀíÔËÐÐÖв»Òª×öÁ½´ÎÒ»ÑùµÄÊÂÇé¡£ ÀýÈ磬Èç¹ûÐèÒªÊý¾Ý»ã×ÜÒÔÓÃÓÚ±¨¸æÄ¿µÄ£¬ÔòÓ¦¸Ã£¨Èç¹û¿ÉÄÜ£©ÔÚ×î³õ´¦ÀíÊý¾ÝʱµÝÔö´æ´¢µÄ×ܼƣ¬Òò´ËÄúµÄ±¨¸æÓ¦ÓóÌÐò²»±ØÖØÐ´¦ÀíÏàͬµÄÊý¾Ý¡£

ÔÚÅú´¦ÀíÓ¦ÓóÌÐò¿ªÊ¼Ê±·ÖÅä×ã¹»µÄÄڴ棬ÒÔ±ÜÃâÔڴ˹ý³ÌÖнøÐкÄʱµÄÖØÐ·ÖÅä¡£

×ÜÊǼÙÉèÊý¾ÝÍêÕûÐÔ×î²î¡£ ²åÈëÊʵ±µÄ¼ì²éºÍ¼Ç¼ÑéÖ¤ÒÔά»¤Êý¾ÝÍêÕûÐÔ¡£

¾¡¿ÉÄÜʵʩУÑéºÍÒÔ½øÐÐÄÚ²¿ÑéÖ¤¡£ ÀýÈ磬¶ÔÓÚÒ»¸öÎļþÀïµÄÊý¾ÝÓ¦¸ÃÓÐÒ»¸öÊý¾ÝÌõÊý¼Í¼£¬¸æËßÎļþÖеļǼ×ÜÊýÒÔ¼°¹Ø¼ü×ֶεĻã×Ü¡£

ÔÚ¾ßÓÐÕæÊµÊý¾ÝÁ¿µÄÀàËÆÉú²ú»·¾³Öо¡Ôç¼Æ»®ºÍÖ´ÐÐѹÁ¦²âÊÔ¡£

ÔÚ´óÅúÁ¿ÏµÍ³ÖУ¬Êý¾Ý±¸·Ý¿ÉÄܾßÓÐÌôÕ½ÐÔ£¬ÌرðÊÇÈç¹ûϵͳÒÔ24-7ÔÚÏßµÄÇé¿öÔËÐС£ Êý¾Ý¿â±¸·Ýͨ³£ÔÚÔÚÏßÉè¼ÆÖеõ½ºÜºÃµÄ´¦Àí£¬µ«Îļþ±¸·ÝÓ¦¸Ã±»ÊÓΪͬÑùÖØÒª¡£ Èç¹ûϵͳÒÀÀµÓÚÎļþ£¬ÔòÎļþ±¸·Ý¹ý³Ì²»½öÓ¦¸Ãµ½Î»²¢¼Ç¼ÔÚ°¸£¬»¹Ó¦¶¨ÆÚ½øÐвâÊÔ¡£

ÈçºÎĬÈϲ»Æô¶¯job

ÔÚʹÓÃjava configʹÓÃspring batchµÄjobʱ£¬Èç¹û²»×öÈκÎÅäÖã¬ÏîÄ¿ÔÚÆô¶¯Ê±¾Í»áĬÈÏÈ¥ÅÜÎÒÃǶ¨ÒåºÃµÄÅú´¦Àíjob¡£ÄÇôÈçºÎÈÃÏîÄ¿ÔÚÆô¶¯Ê±²»×Ô¶¯È¥ÅÜjobÄØ£¿

spring batchµÄjob»áÔÚÏîÄ¿Æô¶¯Ê±×Ô¶¯run£¬Èç¹ûÎÒÃDz»ÏëÈÃËûÔÚÆô¶¯Ê±runµÄ»°£¬¿ÉÒÔÔÚapplication.propertiesÖÐÌí¼ÓÈçÏÂÊôÐÔ£º

spring.batch.job.enabled=false

ÔÚ¶ÁÊý¾ÝʱÄÚ´æ²»¹»

ÔÚʹÓÃspring batch×öÊý¾ÝÇ¨ÒÆÊ±£¬·¢ÏÖÔÚjobÆô¶¯ºó£¬Ö´Ðе½Ò»¶¨Ê±¼äµãʱ¾Í¿¨ÔÚÒ»¸öµØ·½²»¶¯ÁË£¬ÇÒlogÒ²²»ÔÙ´òÓ¡£¬µÈ´ýÒ»¶Îʱ¼äÖ®ºó£¬µÃµ½ÈçÏ´íÎó£º

ºì×ÖµÄÐÅϢΪ£ºResource exhaustion event£ºthe JVM was unable to allocate memory from the heap.

·­Òë¹ýÀ´µÄÒâ˼¾ÍÊÇÏîÄ¿·¢³öÁËÒ»¸ö×ÊÔ´ºÄ¾¡µÄʼþ£¬¸æËßÎÒÃÇjavaÐéÄâ»úÎÞ·¨ÔÙΪ¶Ñ·ÖÅäÄÚ´æ¡£

Ôì³ÉÕâ¸ö´íÎóµÄÔ­ÒòÊÇ: Õâ¸öÏîÄ¿ÀïµÄbatch jobµÄreaderÊÇÒ»´ÎÐÔÄûØÁËÊý¾Ý¿âÀïµÄËùÓÐÊý¾Ý£¬²¢Ã»ÓнøÐзÖÒ³£¬µ±Õâ¸öÊý¾ÝÁ¿Ì«´óʱ£¬¾Í»áµ¼ÖÂÄÚ´æ²»¹»Ó᣽â¾öµÄ°ì·¨ÓÐÁ½¸ö:

µ÷Õûreader¶ÁÊý¾ÝÂß¼­£¬°´·ÖÒ³¶ÁÈ¡£¬µ«ÊµÏÖÉÏ»áÂ鷳һЩ£¬ÇÒÔËÐÐЧÂÊ»áϽµ

Ôö´óserviceÄÚ´æ

Ô­ÎÄÁ´½Ó£ºhttps://blog.csdn.net/topdeveloperr/article/details/84337956/

 
   
1953 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
JavaÐéÄâ»ú¼Ü¹¹
JVM¡ª¡ªJavaÐéÄâ»ú¼Ü¹¹
JavaÈÝÆ÷Ïê½â
Java½ø½×--ÉîÈëÀí½âArrayListʵÏÖÔ­Àí
Java²¢·¢ÈÝÆ÷£¬µ×²ãÔ­ÀíÉîÈë·ÖÎö
×îпγÌ
java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
SpringBoot&Cloud¡¢JavaSSM¿ò¼Ü
Spring Boot Åàѵ
³É¹¦°¸Àý
¹úÄÚÖªÃûÒøÐÐ Spring+SpringBoot+Cloud+MVC
±±¾© Java±à³Ì»ù´¡ÓëÍøÒ³¿ª·¢»ù´¡
±±¾© Struts+Spring
»ªÏÄ»ù½ð ActiveMQ Ô­Àí
ijÃñº½¹« Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢