|
对于最新稳定版本,请使用Spring Batch Documentation 6.0.0! |
管理工作
至少,启动批处理作业需要两点:工作将发布并JobLauncher.两者都可以包含在同一个内部
语境或其他语境。例如,如果你从以下网站启动作业
命令行时,每个 JVM 都会实例化一个新的 JVM工作.因此,每个
工作本身就有它自己的JobLauncher.然而,如果
你是在一个位于HttpRequest通常有一个JobLauncher(配置为异步作业
启动),多个请求调用以启动它们的作业。
从命令行运行作业
如果你想从企业中运营你的工作,
调度器,命令行是主要接口。这是因为
大多数调度器(Quartz 除外,除非使用本地工作)直接与作系统协作
主要由shell脚本启动。有很多种方法
启动除shell脚本外的Java进程,如Perl、Ruby,或
甚至是建造工具,比如Ant或Maven。然而,因为大多数人
熟悉shell脚本,这个例子重点介绍了它们。
命令行作业跑者
因为启动作业的脚本必须启动 Java
虚拟机中需要一个类,其中主要行动方法
作为主要的切入点。Spring Batch 提供了一种实现
其目的是:命令行作业跑者.注意
这只是启动应用的一种方式。有
启动 Java 进程的方法有很多种,而这个类绝不应该是
被视为权威之作。这命令行作业跑者执行四项任务:
-
加载相应的
应用上下文. -
将命令行参数解析为
作业参数. -
根据理由找到合适的工作。
-
使用该
JobLauncher在应用程序上下文中提供以启动作业。
所有这些任务都只需通过传递的论证来完成。 下表描述了所需的参数:
|
用于 XML 文件的位置
创建一个 |
|
要执行的任务名称。 |
这些参数必须先传递,路径排在前面,名称排在后。所有论点
在这些参数被视为作业参数后,被转换为作业参数对象
且格式必须为name=value.
-
Java
-
XML
以下示例展示了以 Java 定义的作业参数传递给作业的日期:
<bash$ java CommandLineJobRunner io.spring.EndOfDayJobConfiguration endOfDay schedule.date=2007-05-05,java.time.LocalDate
以下示例展示了作为作业参数传递给 XML 定义的作业的日期:
<bash$ java CommandLineJobRunner endOfDayJob.xml endOfDay schedule.date=2007-05-05,java.time.LocalDate
|
默认情况下, 在以下例子中,
你可以通过自定义来覆盖这个行为 |
-
Java
-
XML
在大多数情况下,你会想用清单来申报你的主要罐装的课程。然而
为了简化作,该职业被直接使用。这个例子使用了日终来自批处理领域语言的示例。第一
论元为io.spring.EndOfDayJobConfiguration,即完全限定的类别名称
映射到包含作业的配置类。第二个论点,一天结束代表
职位名称。最后的论点,schedule.date=2007-05-05,java.time.localDate,被转换为
变成了JobParameter类型的对象java.time.LocalDate.
下例展示了 的示例配置一天结束在爪哇语中:
@Configuration
@EnableBatchProcessing
public class EndOfDayJobConfiguration {
@Bean
public Job endOfDay(JobRepository jobRepository, Step step1) {
return new JobBuilder("endOfDay", jobRepository)
.start(step1)
.build();
}
@Bean
public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
return new StepBuilder("step1", jobRepository)
.tasklet((contribution, chunkContext) -> null, transactionManager)
.build();
}
}
在大多数情况下,你会想用清单来申报你的主要罐装的课程。然而
为了简化作,该职业被直接使用。这个例子使用了日终来自批处理领域语言的示例。第一
论元为endOfDayJob.xml,是包含工作.第二个论点,一天结束,代表职位名称。最后的论点,schedule.date=2007-05-05,java.time.localDate,被转换为JobParameter类型的对象java.time.LocalDate.
下例展示了 的示例配置一天结束以XML形式表示:
<job id="endOfDay">
<step id="step1" parent="simpleStep" />
</job>
<!-- Launcher details removed for clarity -->
<beans:bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.TaskExecutorJobLauncher" />
前面的例子过于简单,因为对
在 Spring Batch 中运行批量作业,但它主要用于显示两个主要任务
要求命令行作业跑者:工作和JobLauncher.
出口代码
当从命令行启动批处理作业时,企业
调度器经常被使用。大多数排班员都很笨,只做工作
在流程层面。这意味着他们只知道部分内容
作系统进程(例如他们调用的shell脚本)。
在这种情况下,唯一能与调度器通信的方式
关于工作成败的判断,是通过退货代码来判断的。一个
返回码是由进程返回给调度器的数字
用来表示该跑的结果。最简单的情况下,0 是
成功,1就是失败。不过,可能还有更复杂的情况
例如,“如果作业A返回4,则启动作业B,如果返回5,则踢出
离职C。”这种行为在调度器层面进行配置,
但像 Spring Batch 这样的处理框架非常重要
提供返回出口代码数值表示的方法
针对特定的批次作业。在春季批次中,这一过程被封装
在退出状态,该内容包含更多内容
详见第五章。为了讨论出口代码,以下内容
唯一重要的是退出状态具有一个出口代码属性,为
由框架(或开发者)设置,并作为作业执行从......JobLauncher.这命令行作业跑者转换该字符串值
通过使用ExitCodeMapper接口:
public interface ExitCodeMapper {
public int intValue(String exitCode);
}
本质合同ExitCodeMapper给定字符串出口时,是
代码,会返回一个数字表示。默认
作业运行者使用的实现是SimpleJvmExitCodeMapper完成时返回0,通用错误返回1,任意作业返回2
跑者错误,比如找不到工作在所提供的语境下。甚至更多
需要比上述三个值更复杂的,需要自定义
实现ExitCodeMapper接口
必须提供。因为命令行作业跑者是创建的类
一应用上下文因此,不可能存在
“连接在一起”,任何需要覆盖的值必须是
自动接线。这意味着如果ExitCodeMapper在豆子工厂,
在上下文创建后,它被注入运行器。都
这是必须完成的,才能提供属于你的ExitCodeMapper是声明实现
作为根级豆,并确保它是应用上下文负载为
跑步者。
在Web容器内运行作业
历史上,离线处理(如批处理作业)一直是
如前所述,从命令行启动。不过,有
许多情况下,从HttpRequest是
更好的选择。许多此类用例包括报表、临时作业
运行,以及网页应用支持。因为批处理作业(按定义)
长期运营,最重要的问题是启动
异步工作:
这里的控制器是Spring MVC控制器。参见
关于春季MVC的更多信息,请参阅Spring Framework Reference Guide。
控制器发射工作通过使用JobLauncher该系统已配置为异步发射,且
立即返回作业执行.这工作很可能仍在运行。然而,这个
非阻塞行为允许控制器立即返回,且
在处理HttpRequest.以下列表
展示一个示例:
@Controller
public class JobLauncherController {
@Autowired
JobLauncher jobLauncher;
@Autowired
Job job;
@RequestMapping("/jobLauncher.html")
public void handle() throws Exception{
jobLauncher.run(job, new JobParameters());
}
}