首页 > 其他分享 >springbatch 实例

springbatch 实例

时间:2023-10-18 11:34:36浏览次数:32  
标签:return batch Bean 实例 org import springbatch public

package com.jeesite.modules.sdbatch.service;

import com.jeesite.common.idgen.IdGen;
import com.jeesite.modules.medrec.service.MedRecMainService;
import com.jeesite.modules.sdcommon.DateUtils;
import com.jeesite.modules.sdform.service.SdCourseService;
import com.jeesite.modules.util.ProjectUtils;
import lombok.SneakyThrows;
import org.apache.xmlbeans.impl.common.XPath;
import org.junit.Test;
import org.springframework.batch.core.*;
import org.springframework.batch.core.annotation.BeforeStep;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.core.listener.ExecutionContextPromotionListener;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.scope.context.StepContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;

/**
 * TaskletWay  通过匿名内部类调用业务处理方法
 */
@Configuration //用于告诉spring,咱们这个类是一个自定义配置类,里面很多bean都需要加载到spring容器里面
public class TaskletWay {

    @Autowired
    private StepBuilderFactory stepBuilderFactory;
    @Autowired
    private MedRecMainService medRecMainService;
    @Autowired
    private SdCourseService sdCourseService;
    @Autowired
    private JobBuilderFactory jobBuilderFactory;
    @Autowired
    private JobLauncher jobLauncher;


    /**
     *
     * @return
     */
    @Bean
    public Tasklet diseaseLet() {
        //lambda 表达式简化匿名内部类
        return (StepContribution contribution, ChunkContext chunkContext) -> {
            sdCourseService.diseaseScript();
            return RepeatStatus.FINISHED;
        };
    }

    @Bean
    public Tasklet PIPLet() {
        //lambda 表达式简化匿名内部类
        return (StepContribution contribution, ChunkContext chunkContext) -> {
            sdCourseService.specialScript("PIP");
            return RepeatStatus.FINISHED;
        };
    }

    @Bean
    public Tasklet DVTLet() {
        //lambda 表达式简化匿名内部类
        return (StepContribution contribution, ChunkContext chunkContext) -> {
            sdCourseService.specialScript("DVT");
            return RepeatStatus.FINISHED;
        };
    }

    @Bean
    public Tasklet VTELet() {
        //lambda 表达式简化匿名内部类
        return (StepContribution contribution, ChunkContext chunkContext) -> {
            sdCourseService.specialScript("VTE");
            return RepeatStatus.FINISHED;
        };
    }

    @Bean
    public Tasklet fieldLet() {
        //lambda 表达式简化匿名内部类
        return (StepContribution contribution, ChunkContext chunkContext) -> {
            sdCourseService.fieldScript();
            return RepeatStatus.FINISHED;
        };
    }

    @Bean
    public Tasklet formLet() {
        //lambda 表达式简化匿名内部类
        return (StepContribution contribution, ChunkContext chunkContext) -> {
            sdCourseService.formScript();
            return RepeatStatus.FINISHED;
        };
    }

    @Bean
    public Step diseaseStep() {
        return stepBuilderFactory
                .get("diseaseStep").tasklet(diseaseLet())
                .build();
    }

    @Bean
    public Step PIPStep() {
        return stepBuilderFactory
                .get("PIPStep").tasklet(PIPLet())
                .build();
    }

    @Bean
    public Step DVTStep() {
        return stepBuilderFactory
                .get("DVTStep").tasklet(DVTLet())
                .build();
    }

    @Bean
    public Step VTEStep() {
        return stepBuilderFactory
                .get("VTEStep").tasklet(VTELet())
                .build();
    }

    @Bean
    public Step fieldStep() {
        return stepBuilderFactory
                .get("fieldStep").tasklet(fieldLet())
                .build();
    }

    @Bean
    public Step formStep() {
        return stepBuilderFactory
                .get("formStep").tasklet(formLet())
                .build();
    }

    /**
     * 先确定
     * 然后处理
     * 然后调用
     * 下来进行
     */
    @SneakyThrows
    @Bean
    public void deterSdBatch() {
        Job job = jobBuilderFactory.get("diseaseBatch")
                .incrementer(new RunIdIncrementer())
                .flow(diseaseStep())
                .next(DVTStep())
                .next(PIPStep())
                .next(VTEStep())
                .next(formStep())
                .next(fieldStep())
                .end()
                .build();
        JobParameters jobParameters = new JobParametersBuilder()
                .addString("batch_no", DateUtils.getDate())  //batch参数1
                .addString("time", DateUtils.getTime())  //batch参数2
                .toJobParameters();
        jobLauncher.run(job, jobParameters);
    }

    /**
     * 获取
     *
     * @return
     */
    public Tasklet eleRecordLet() {

        return (StepContribution contribution, ChunkContext chunkContext) -> {
            ExecutionContext executionContext = contribution.getStepExecution().getJobExecution().getExecutionContext();
            //进行向下一步骤传参
            List<String> ids = sdCourseService.eleRecord();
            executionContext.put("inpatientIds", ids);
            // 调用接口
//            sdCourseService.;
            //返回list<String>
            return RepeatStatus.FINISHED;
        };
    }

    /**
     * 调用生成
     *
     * @return
     */
    @Bean
    public Tasklet modelEntityLet() {
        return (StepContribution contribution, ChunkContext chunkContext) -> {
            ExecutionContext executionContext = contribution.getStepExecution().getJobExecution().getExecutionContext();
            List<String> ids = (List<String>) executionContext.get("inpatientIds");   //获取上个步骤传来的参数
            if(ids != null){
                sdCourseService.modelAPI(ids);
            }
            return RepeatStatus.FINISHED;
        };
    }

    @Bean
    public Step eleRecordStep() {
  
        return stepBuilderFactory
                .get("eleRecordStep")
                .tasklet(eleRecordLet())
                .build();
    }

    @Bean
    public Step modelEntityStep() {
        return stepBuilderFactory
                .get("modelEntityStep").tasklet(modelEntityLet())
                .build();
    }

    @SneakyThrows
    @Bean
    public void entityBatch() {
        Job job = jobBuilderFactory.get("entityBatch")
                .incrementer(new RunIdIncrementer())
                .flow(eleRecordStep())
                .next(modelEntityStep())
                .end()
                .build();
        JobParameters jobParameters = new JobParametersBuilder()
                .addString("batch_no", DateUtils.getDate())
                .addString("time", DateUtils.getTime())
                .toJobParameters();
        jobLauncher.run(job, jobParameters);
    }
}
            

先创建 let 然后创建step 过程是通过step来进行串接的,let是主要调用逻辑代码和实现参数传递的

标签:return,batch,Bean,实例,org,import,springbatch,public
From: https://www.cnblogs.com/liangyy09/p/17771667.html

相关文章

  • Java(Spring) 通过反射classforName获取对象实例导致@Autowired注入失效
    使用策略模式多态获取具体的策略问题描述:classforName在代码中使用反射获取对象实例后,对象实例中通过@Autowrite注解注入的属性值为null(注入失败),导致带反射获取的对象实例调用方法时出现空指针等情况。问题原因:通过反射获取对象实例相当于“new”了一个对象,所以这个对象并没有被......
  • 优维产品使用最佳实践:实例拓扑
    背景实例拓扑可以帮助我们直观地了解整个系统的架构和组成情况,该拓扑图是通过已有的实例的关联关系自动生成,当实例数据和关系变化时拓扑图也能实时更新,我们可以快速直观的查看当前实例下所有资源的之间的网状关系和资源数量。实例拓扑支持以下功能:过滤实例,可以只看符合的规则的实......
  • Java大文件上传详解及实例代码
    前言:上周遇到这样一个问题,客户上传高清视频(1G以上)的时候上传失败。一开始以为是session过期或者文件大小受系统限制,导致的错误。查看了系统的配置文件没有看到文件大小限制,web.xml中seesiontimeout是30,我把它改成了120。但还是不行,有时候10分钟就崩了。同事说,可能是客户这里服......
  • Python 练习实例22
    题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。程序源代码:实例#!/usr/bin/python#-*-coding:UTF-8-*-foriinrange(ord('x'),ord('z')+1):......
  • Python 练习实例23
    题目:打印出如下图案(菱形):*************************程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。程序源代码:实例#!/usr/bin/python#-*-coding:UTF-8-*-fromsysimportstdoutforiinrange(4)......
  • Python 练习实例21
    题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。程序分析:采取逆向思维的方法,从后往前推断。程......
  • 锐捷交换机MSTP(多实例生成树协议)配置
    一、组网需求内网有4个vlan,vlan10和20的生成树根桥在核心交换机A上,vlan30,40的vlan根桥在核心交换机B上。 二、组网拓扑:   三、配置要点:开启生成树功能创建不同的实例为实例配置优先级 四、配置步骤:注意:配置之前建议使用Ruijie#showinterfacestatus查看接口......
  • vue实例挂载以及模板解析过程
    抽空看了下vue源码,记录下newVue()的过程。 在package.json中运行命令添加sourcemap,打包后在源码案例目录下创建新的html文件,运行后可以在控制台断点调试 测试代码<scriptsrc="../../dist/vue.js"></script><divid="demo"><p@click="searchQuery=333">{{sear......
  • 类里面静态方法(@staticmethod),类方法(@classmethod)和实例方法(self)的使用与区别
    前言python类里面常用的方法有3个:静态方法(@staticmethod),类方法(@classmethod)和实例方法(self)本篇讲解这3种方法在使用上有什么区别。函数先从函数说起,方法跟函数是有区别的,经常有人容易混淆,函数定义是def关键字定义(外面没class)deffun():a="hello"returna#......
  • static 特点2 多了一种调用方式 不需要实例化,可以直接类名调用
    效果1  实例化后被调用 效果2 ......