当前位置: 移动技术网 > IT编程>开发语言>Java > Spring Batch学习笔记(一)

Spring Batch学习笔记(一)

2019年03月21日  | 移动技术网IT编程  | 我要评论

spring batch简介

    spring batch提供了可重复使用的功能,用来处理大量数据。包括记录、跟踪,事务管理,作业处理统计,作业重启,跳过和资源管理。
此外还提供了更高级的技术服务和功能,通过优化和分区技术实现极高容量和高性能的批处理作业。

spring batch使用场景

(1)一般的批处理程序
·从数据库,文件或者队列中读取大量数据
·处理读取到的数据
·将处理完成的数据保存到文件,数据库
(2)业务场景
·定期提交批处理
·并发批处理,并行处理job
·分阶段的企业消息驱动处理
·大规模并行批处理
·失败后手动或预定重启
·依赖步骤的顺序处理
·部分处理,跳过记录
·整批交易,适用于批量较小或现有存储过程/脚本的情况

spring batch主要组成部分

·jobrepository,用来注册job的容器
·joblauncher,用来启动job的接口
·job,实际执行的任务,包含一个或多个step
·step,step包含itemreader、itemprocessor和itemwriter
·itemreader,用来读取数据的接口
·itemprocessor,用来处理数据的接口
·itemwriter,用来输出数据的接口
以上spring batch的主要组成部分只需要注册成spring的bean即可。批处理的配置类上需要使用@enabelbatchprocessing。

代码

(1)监听器joblistener
    @component
    public class joblistener implements jobexecutionlistener{
        @override
        public void beforejob(jobexecution jobexecution){
            // job执行前需要执行的操作
        }
        
        @override
        public void afterjob(jobexecution jobexecution){
            // job执行完成后需要执行的操作
        }
    }
(2)配置类databatchconfiguration
    @configuration
    @enablebatchprocessing
    public class databatchconfiguration{
        // 用于构建job
        @resource
        private jobbuilderfactory jobbuilderfactory;
        
        // 用于构建step
        @resource
        private stepbuilderfactory stepbuilderfactory;
        
        // 监听器
        @resource
        private joblistener joblistener;
        
        // itemreader(使用的其中一种读取方式)
        @autowired
        private repositoryitemreader readerdata;
        
        // itemwriter
        @autowired
        private itemreader writerdata;
        
        // job
        @bean
        public job datahandlejob(){
            return jobbuilderfactory.get("datahandlejob").incrementer(new runidincrementer()).start(getdatastep())
                .listener(joblistener).build();
        }
        
        // step
        // user:要处理的对象
        @bean
        public step gettdistsellout() {
        return stepbuilderfactory.get("getdata").<user, user>chunk(10000) // 一次commit数据的数量
                .faulttolerant().retrylimit(3)
                .retry(exception.class)
                .skiplimit(100)                                          // 发生异常时,允许重试的次数
                .skip(exception.class)
                .reader(readerdata)                                      // reader
                .writer(writerdata).build();                             // writer
        }
    }
(3)读取类readerstep
   @component
   public class readerstep{
       @resource
       private entitymanagerfactory emf;
       
       @autowired
       private userrepository userrepository;
       
       @bean repositoryitemreader<user> readerdata(){
           // 排序map(读取数据按照id进行正序排列)
           map<string,sort.direction> map = new hashmap<>();
           map.put("id",sort.direction.asc);
           // sql语句所需参数list
           list<string> params = new arraylist<>();
           params.add("2019-03-20");
           repositoryitemreader<user> repositoryitemreader = new new repositoryitemreader<>();
           // set repository
           repositoryitemreader.setrepository(userrepository);
           // set pagesize(没有会报错)
           repositoryitemreader.setpagesize(5);
           // set repository method
           repositoryitemreader.setmethodname("findbydatelike");
           // set 参数list
           repositoryitemreader.setarguments(params);
           // set 排序map
           repositoryitemreader.setsort(map);
           return repositoryitemreader;
       }
   }
(4)写出类writerstep
    @component
    public class writerstep {
        @resource
        private userrepository userrepository;

        @bean
        public repositoryitemwriter<user> writerdata(){
            repositoryitemwriter<user> repositoryitemwriter = new repositoryitemwriter<>();
            repositoryitemwriter.setrepository(userrepository);
            repositoryitemwriter.setmethodname("save");
            return repositoryitemwriter;
        }
    }

参考网址

https://www.cnblogs.com/ealenxie/p/9647703.html

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网