栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Spring Batch之Step的提交间隔(十七)

Spring Batch之Step的提交间隔(十七)

        批处理作业通常针对大数据量进行处理,同时框架需要将作业处理的状态实时地持久化到数据库中,如果读取一条记录就进行写操作或者状态数据的提交,会大量消耗系统资源,导致批处理框架性能下降。在面向批处理Chunk的操作中,可以通过属性commit-interval设置read多少条记录后进行一次提交。通过设置commit-interval的间隔值,减少提交频次,降低资源使用率。

通过commit-interval设置Chunk的提交频次:


  
  
     
        
        
        
     
  

按照上面的Chunk的操作,提交间隔是3次,那么读操作被调用3次,处理操作被调用3次,写操作只被调用1次。

项目实例 1.项目框架

 2.代码实现

AutoProcessor.java:

package com.xj.demo13;

import org.springframework.batch.item.ItemProcessor;

public class AutoProcessor implements ItemProcessor {

    @Override
    public String process(String item) throws Exception {
        System.out.println("Processor "+ item);
        return item;
    }
}

AutoReader.java:

package com.xj.demo13;

import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.NonTransientResourceException;
import org.springframework.batch.item.ParseException;
import org.springframework.batch.item.UnexpectedInputException;


public class AutoReader implements ItemReader {
    private int count = 0;
    private int maxCount = 30;
    @Override
    public String read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {

        if(count > maxCount){
            return null;
        }else{
            count++;
            System.out.println("reader--->" + count);
            return count + "";
        }
    }
}

AutoWriter.java:

package com.xj.demo13;

import org.springframework.batch.item.ItemWriter;
import java.util.List;


public class AutoWriter implements ItemWriter {
    @Override
    public void write(List list) throws Exception {
        System.out.println("Writer Begin!");
        for(String item : list){
            System.out.println("Writer --->" + item);
        }
        System.out.println("Writer End!");
    }
}

Demo13BatchMain.java:

package com.xj.demo13;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class Demo13BatchMain {
    public static void main(String[] args) {
        Demo13BatchMain batchMain = new Demo13BatchMain();
        //测试skip
        batchMain.executeJob("demo13/job/demo13-job.xml", "commitJob", "jobLauncher", new JobParametersBuilder().toJobParameters());
    }

    
    public void executeJob(String jobXmlPath, String jobId, String jobLauncherId, JobParameters jobParameters){
        ApplicationContext context = new ClassPathXmlApplicationContext(jobXmlPath);
        JobLauncher jobLauncher = (JobLauncher) context.getBean(jobLauncherId);
        //获取要执行的Job
        Job job = (Job)context.getBean(jobId);

        try{
            //开始执行作业Job
            JobExecution jobExecution =  jobLauncher.run(job, jobParameters);
            //输出执行结果
            System.out.println(jobExecution.toString());
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

demo13-job.xml:




    

    
        
            
                
            
        
    

demo13-jobContext.xml:




    

    
        
    

    

    
    

    
    

    
    

3.运行结果

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/679704.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号