管理工作
至少,启动批处理作业需要两点:工作将发布并作业操作员.两者都可以包含在同一个内部
语境或其他语境。例如,如果你从以下网站启动作业
命令行时,每个 JVM 都会实例化一个新的 JVM工作.因此,每个
工作本身就有它自己的作业操作员.然而,如果
你是在一个位于HttpRequest通常有一个作业操作员(配置为异步作业
启动),多个请求调用以启动它们的作业。
从命令行运行作业
如果你想从企业中运营你的工作,
调度器,命令行是主要接口。这是因为
大多数调度器(Quartz 除外,除非使用本地工作)直接与作系统协作
主要由shell脚本启动。有很多种方法
启动除shell脚本外的Java进程,如Perl、Ruby,或
甚至是建造工具,比如Ant或Maven。然而,因为大多数人
熟悉shell脚本,这个例子重点介绍了它们。
命令行作业操作员
因为启动作业的脚本必须启动 Java
虚拟机中需要一个类,其中主要行动方法
作为主要的切入点。Spring Batch 提供了一种实现
其目的是:命令行作业操作员.注意
这只是启动应用的一种方式。有
启动 Java 进程的方法有很多种,而这个类绝不应该是
被视为权威之作。这命令行作业操作员执行四项任务:
-
加载相应的
应用上下文. -
将命令行参数解析为
作业参数. -
根据理由找到合适的工作。
-
使用该
作业操作员在应用程序上下文中提供以启动作业。
所有这些任务都只需通过传递的论证来完成。 下表描述了所需的参数:
|
工作配置类别的完全限定名称
创建一个 |
|
执行任务的名称。可能是[ |
|
根据作的不同,这可以是要开始的作业名称,也可以是停止、重启、放弃或恢复的作业的执行ID。 |
在开始一个作业时,所有之后的参数都被视为作业参数,会被转化为作业参数对象
且格式必须为name=value,类型,识别.在停止、重启、放弃或恢复工作的情况下,jobExecutionId是
预期为第四个论元,其余所有论元均被忽略。
以下示例展示了以 Java 定义的作业参数传递给作业的日期:
<bash$ java CommandLineJobOperator io.spring.EndOfDayJobConfiguration start endOfDay schedule.date=2007-05-05,java.time.LocalDate
默认情况下,命令行作业操作员使用DefaultJobParameters转换器这隐含地转换
通过键值对来识别作业参数。不过,你可以明确说明
哪些作业参数是识别的,哪些不是,通过加以后缀true或false分别。
在以下例子中,日程。日期是识别作业参数,而vendor.id莫:
<bash$ java CommandLineJobOperator io.spring.EndOfDayJobConfiguration start endOfDay \
schedule.date=2007-05-05,java.time.LocalDate,true \
vendor.id=123,java.lang.Long,false
你可以通过设置自定义来覆盖这个行为作业参数转换器在命令行作业操作员.
出口代码
当从命令行启动批处理作业时,企业
调度器经常被使用。大多数排班员都很笨,只做工作
在流程层面。这意味着他们只知道部分内容
作系统进程(例如他们调用的shell脚本)。
在这种情况下,唯一能与调度器通信的方式
关于工作成败的判断,是通过退货代码来判断的。一个
返回码是由进程返回给调度器的数字
用来表示该跑的结果。最简单的情况下,0 是
成功,1就是失败。不过,可能还有更复杂的情况
例如,“如果作业A返回4,则启动作业B,如果返回5,则踢出
离职C。”这种行为在调度器层面进行配置,
但像 Spring Batch 这样的处理框架非常重要
提供返回出口代码数值表示的方法
针对特定的批次作业。在春季批次中,这一过程被封装
在退出状态,该内容包含更多内容
详见第五章。为了讨论出口代码,以下内容
唯一重要的是退出状态具有一个出口代码属性,为
由框架(或开发者)设置,并作为作业执行从......作业操作员.这命令行作业操作员转换该字符串值
通过使用ExitCodeMapper接口:
public interface ExitCodeMapper {
int intValue(String exitCode);
}
本质合同ExitCodeMapper给定字符串出口时,是
代码,会返回一个数字表示。默认实现
作业跑腿者使用的是SimpleJvmExitCodeMapper完成时返回0,通用错误返回1,任意作业返回2
跑者错误,比如找不到工作在所提供的语境下。甚至更多
需要比上述三个值更复杂的,需要自定义
实现ExitCodeMapper接口
必须通过设置在命令行作业操作员.
在Web容器内运行作业
历史上,离线处理(如批处理作业)一直是
如前所述,从命令行启动。不过,有
许多情况下,从HttpRequest是
更好的选择。许多此类用例包括报表、临时作业
运行,以及网页应用支持。因为批处理作业(按定义)
长期运营,最重要的问题是启动
异步工作:
这里的控制器是Spring MVC控制器。参见
关于春季MVC的更多信息,请参阅Spring Framework Reference Guide。
控制器发射工作通过使用作业操作员该系统已配置为异步发射,且
立即返回作业执行.这工作很可能仍在运行。然而,这个
非阻塞行为允许控制器立即返回,且
在处理HttpRequest.以下列表
展示一个示例:
@Controller
public class JobOperatorController {
@Autowired
JobOperator jobOperator;
@Autowired
Job job;
@RequestMapping("/jobOperator.html")
public void handle() throws Exception{
jobOperator.start(job, new JobParameters());
}
}