SpringBatch 配置Job之二

本文介绍了SpringBatch框架中的StepScope特性,用于控制Bean的生命周期,并详细解释了如何使用JobLauncher来调度作业,同时探讨了SpringBatch与定时任务、Web应用的集成方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Step Scope

Step Scope时SpringBatch框架提供的自定义的Scope,将SpringBean定义为Step Scope,支持SpringBean在Step开始的时候初始化,在Step结束的时候销毁SpringBean,将
SpringBean的生命周期与Step绑定。

在SpringBatch框架中,Step Scope会自动被注册到Spring上下文中,如果没有使用Spring的配置文件,需要显示的声明Step Scope。

    <bean:bean id="csvItemReader"
        class="org.springframework.batch.item.file.FlatFileItemReader" 
        scope="step">
        ...
        ...
    </bean:bean>

通过属性scope=”step”来定义csvItemReader的生命周期和Step绑定


运行Job

SpringBatch 框架提供了一组执行Job的接口。包括JobLauncher、JobExplorer和JobOperator三个操作Job的接口。

JobLauncher 是最常用的作业调度器,通过给定的Job Name 和Job Parameters 可以执行Job;

JobExplorer 主要负责从JobRepository中获取执行的信息,包括获取作业实例、获取作业执行器、获取作恶步执行器、获取正在运行的作业执行器、获取作业列表等操作;

JobOperator 包含了JobLauncher和JobExplorer中的大部分操作。

这里写图片描述

调度作业

通过JobLauncher来调度作业

        // 调度作业
        ApplicationContext context = new ClassPathXmlApplicationContext("job.xml");
        JobLauncher launcher = (JobLauncher) context.getBean("jobLauncher");
        Job job = (Job) context.getBean("billJob");
        try {
            JobExecution result = launcher.run(job, new JobParameters());
            System.out.println(result.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }

JobLauncher支持对作业的同步、异步两种调用模式。

同步异步

配置异步调用的JobLauncher只需要增加属性taskExecutor,该属性表示当前执行的线程池。

    <!-- 配置异步JobLauncher -->    
    <!-- 配置大小为5的线程池 -->
    <task:executor id = "executor" pool-size="5" />
    <bean:bean id = "jobLauncherAsyn" 
            class = "org.springframework.batch.core.launch.support.SimpleJobLauncher">
        <bean:property name = "jobRepository" ref ="jobRepository" />
        <!-- 为作业调度器配置执行的线程池,
             作业执行期间会从线程池中选择一个线程执行Job
        -->
        <bean:property name = "taskExecutor" red="executor" />
    </bean:bean>

这里写图片描述

Job与外界系统

在实际的Job使用场景中,标准Web应用、定时任务调度器、命令行等都可能触发不同的Job操作。

这里写图片描述

与定时任务集成

SpringBatch提供了Job的执行能力,其本身不是一个定时调度框架,因此可以将定时调度框架和SpringBatch结合起来完成定时作业。Spring本身提供了一个轻量级的调度框架Spring scheduler。

这里写图片描述

    <!-- 执行定时任务的线程池大小 -->
    <task:scheduler id="scheduler" pool-size="100" />

    <!-- 每一分钟,执行对象schedulerLauncher的launch方法一次 -->
    <task:scheduled-tasks scheduler="scheduler">
        <task:scheduled ref="schedulerLauncher" method="launch" fixed-rate="1000"/>
    </task:scheduled-tasks>

    <bean:bean id = "schedulerLauncher" class = "">
        <bean:property name = "job" ref = "hellowordJob" />
        <bean:property name="jobLauncher" ref="jobLauncher" />
    </bean:bean>

    <!-- HellowordJob -->
    <job id = "hellowordJob">
        <step>
            ...
            ...         
        </step>
    </job>
public class SchedulerLauncher {

    private Job job;

    private JobLauncher jobLauncher;

    public void launch() throws Exception{
        JobParameters jobParams = this.createJobParameters();
        jobLauncher.run(job, jobParams);
    }

    private JobParameters createJobParameters(){
        JobParameters jobParams = new JobParametersBuilder()
                                        .addDate("executeDate", new Date()).toJobParameters();
        return jobParams;
    }

}

与Web应用集成

SpringBatch框架基于Spring开发,可以方便的内嵌在web应用中使用,这样批处理作业可以通过HTTP协议进行远程的访问。同样可以在web应用中内嵌定时任务处理框架,方便在web应用内部通过定时框架调用SpringBatch中定义的Job。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值