• springBatch学习 batch的使用方式(5)


               首先讲一下batch框架提供的一组job执行的api 如下图

                      

    说明:

    应用场景 包含三种 标准的web ,定时任务调度,命令行

    1.命令行

        通过命令行在单独的jvm中调用 进行批处理作业 springbatch提供了命令行执行类 commandLineJobRunner

    1.将项目构件为jar 

    2. 进入jar项目目录 执行jar包

    注意:  默认从classpath路径开始加载配置文件

    -restart 根据job名称重启最后一次失败作业

    -stop  根据job名称停止正在执行的作业

    -abandon 废弃正在执行的作业

    -next 根据jobparameters去执行下一次作业

    如果需要自定义任务退出状态 实现exicodetmapper  然后配置即可

    2.与定时任务集成


    结合spring schdule 可以很简单的实现定时集成

    1.定义一个schdule 提供执行定时任务的线程

    2.定义所需要的方法和调度周期

    <task:scheduler id="scheduler" pool-size="10" /> 定义线程池大小
        
        <!-- 每一秒钟,执行对象schedulerLauncher的launch方法一次 -->    
        <task:scheduled-tasks scheduler="scheduler">
            <task:scheduled ref="schedulerLauncher" method="launch" fixed-rate="1000" />  fixrate代表一秒执行一次  在schduleLaucher中的lauch方法
        </task:scheduled-tasks>
        
        <bean:bean id="schedulerLauncher" 
            class="com.juxtapose.example.ch04.scheduler.SchedulerLauncher">
            <bean:property name="job" ref="helloworldJob" />
            <bean:property name="jobLauncher" ref="jobLauncher" />
        </bean:bean>
        省略其余配置

    3.与web集成

    spring barch 有spring基础开发完成 内嵌在spring框架中提供http协议远成调用或者web系统定时调用 

    如下图:

    //定义一个controller提供调用
    import java.util.Enumeration; import javax.servlet.http.HttpServletRequest; import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.JobParametersBuilder; import org.springframework.batch.core.configuration.JobRegistry; import org.springframework.batch.core.launch.JobLauncher; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @Controller public class JobLauncherController { private static final String JOB_NAME = "jobName"; private JobLauncher jobLauncher; private JobRegistry jobRegistry; public JobLauncherController(JobLauncher jobLauncher, JobRegistry jobRegistry) { this.jobLauncher = jobLauncher; this.jobRegistry = jobRegistry; } @RequestMapping(value="executeJob",method=RequestMethod.GET) public void launch(@RequestParam String jobName,HttpServletRequest request) throws Exception { JobParameters jobParameters = bulidParameters(request); jobLauncher.run( jobRegistry.getJob(jobName),jobParameters); } private JobParameters bulidParameters(HttpServletRequest request) { JobParametersBuilder builder = new JobParametersBuilder(); @SuppressWarnings("unchecked") Enumeration<String> paramNames = request.getParameterNames(); while(paramNames.hasMoreElements()) { String paramName = paramNames.nextElement(); if(!JOB_NAME.equals(paramName)) { builder.addString(paramName,request.getParameter(paramName)); } } return builder.toJobParameters(); } }  

         配置文件 

    <!-- 作业仓库 -->
        <job-repository id="jobRepository" data-source="dataSource"
            transaction-manager="transactionManager" isolation-level-for-create="SERIALIZABLE"
            table-prefix="BATCH_" max-varchar-length="1000"
        />
        
        <!-- 作业调度器 -->
        <bean:bean id="jobLauncher" 
            class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
            <bean:property name="jobRepository" ref="jobRepository"/>
        </bean:bean>
        
    通过这个类 可以在job被加载后加入注册。然后被获取 <bean:bean class="org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor"> <bean:property name="jobRegistry" ref="jobRegistry" /> </bean:bean> <bean:bean id="jobRegistry" job注册 class="org.springframework.batch.core.configuration.support.MapJobRegistry" /> <!-- 事务管理器 --> <bean:bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <bean:property name="dataSource" ref="dataSource" /> </bean:bean> <!-- 数据源 --> <bean:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <bean:property name="driverClassName"> <bean:value>com.mysql.jdbc.Driver</bean:value> </bean:property> <bean:property name="url"> <bean:value>jdbc:mysql://127.0.0.1:3306/test1289</bean:value> </bean:property> <bean:property name="username" value="root"></bean:property> <bean:property name="password" value="000000"></bean:property> </bean:bean> </bean:beans>

    构造controlller

    <bean class="com.juxtapose.example.ch04.web.JobLauncherController">
    <constructor-arg ref="jobLauncher" />
    <constructor-arg ref="jobRegistry" />
    </bean>
    </beans>

    别的配置 如web.xml之类的省略。

    启动web项目 就可以通过url访问了

    基本就以上三种方法

     

      

  • 相关阅读:
    atitit.团队建设要不要招技术储备人才的问题
    Atitit. 最佳实践 QA降低cpu占有率cpu占用太高怎么办
    Atitit.struts2体系结构大总结
    Atitit.hibernate体系结构大总结
    Atitit.软件GUI按钮与仪表盘db数据库区导入mysql sql错误的解决之道
    Atitit. Gui控件and面板程序快速启动区最佳实践Launchy ObjectDocko0g
    Atitit。团队建设管理最佳实践如何留住核心人才,防止人才流失 ??
    Atitit.ALT+TAB没反应车and 点击任务栏程序闪烁但是不能切换
    Atitit.Gui控件and面板数据库区mssql 2008 权限 配置 报表查看成员
    Atitit.故障排除系列NoClassDefFoundError NoClassDefFoundError
  • 原文地址:https://www.cnblogs.com/zyzcj/p/7406392.html
Copyright © 2020-2023  润新知