Elastic-job之脚本作业

简介: 脚本作业是用来定时调度脚本文件的,如windows的cmd,linux上的shell文件,在调度的时候会把当前调度的ShardingContext的转化为一个JSON串作为脚本调度的参数进行传递。

脚本作业是用来定时调度脚本文件的,如windows的cmd,linux上的shell文件,在调度的时候会把当前调度的ShardingContext的转化为一个JSON串作为脚本调度的参数进行传递。其不需要指定作业对应的class,因为我们不是通过我们自己的class来进行调度的。脚本作业在配置时由<job:script/>配置,示例如下:

<job:script id="myScriptJob" registry-center-ref="regCenter"
	cron="0/30 * * * * ?" sharding-total-count="3"
	sharding-item-parameters="0=shard-0,1=shard-1,2=shard-2"
	script-command-line="echo hello" overwrite="true"/>

其中script-command-line属性用于指定该调度对应的脚本文件路径或某个可执行的指令。这里只是简单的打印一下hello和ShardingContext对应的JSON形式。其它配置参数和之前介绍的简单作业的配置参数类似。

脚本作业将由com.dangdang.ddframe.job.executor.type.ScriptJobExecutor执行。其代码如下:

public final class ScriptJobExecutor extends AbstractElasticJobExecutor {
    
    public ScriptJobExecutor(final JobFacade jobFacade) {
        super(jobFacade);
    }
    
    @Override
    protected void process(final ShardingContext shardingContext) {
        final String scriptCommandLine = ((ScriptJobConfiguration) getJobRootConfig().getTypeConfig()).getScriptCommandLine();
        if (Strings.isNullOrEmpty(scriptCommandLine)) {
            throw new JobConfigurationException("Cannot find script command line for job '%s', job is not executed.", shardingContext.getJobName());
        }
        executeScript(shardingContext, scriptCommandLine);
    }
    
    private void executeScript(final ShardingContext shardingContext, final String scriptCommandLine) {
        CommandLine commandLine = CommandLine.parse(scriptCommandLine);
        commandLine.addArgument(GsonFactory.getGson().toJson(shardingContext), false);
        try {
            new DefaultExecutor().execute(commandLine);
        } catch (final IOException ex) {
            throw new JobConfigurationException("Execute script failure.", ex);
        }
    }
}

(本文由Elim写于2017年10月1日)

目录
相关文章
|
6月前
|
Java 调度 Maven
Elastic-job分布式调度系统
Elastic-job分布式调度系统
|
6月前
|
资源调度 关系型数据库 数据库
实时计算 Flink版产品使用合集之flink-cdc.sh xx.yaml提交到yarn 发现没有启动task manager的,怎么处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
资源调度 分布式计算 Oracle
实时计算 Flink版操作报错合集之flink on yarn job manager 可以启动, 但不给分配slot ,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
169 0
|
5月前
|
SQL Kubernetes 数据处理
实时计算 Flink版产品使用问题之在 flink-conf.yaml 中定义的配置在某些情况下未被正确应用到 K8s 上运行的任务管理器(JobManager)和任务管理节点(TaskManager),是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
存储 监控 调度
【Flink】怎么提交的实时任务,有多少Job Manager?
【4月更文挑战第18天】【Flink】怎么提交的实时任务,有多少Job Manager?
|
6月前
|
SQL Prometheus Cloud Native
Flink启动问题之job启动失败如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
运维
Elastic Job进阶--作业是如何被立即触发的
Elastic Job进阶--作业是如何被立即触发的
|
存储 算法 安全
定时任务之elastic-job概述
定时任务之elastic-job概述
393 0
|
SQL Java 关系型数据库
elastic-job 定时任务集成
elastic-job 定时任务集成
482 0
elastic-job 定时任务集成
|
运维 算法 Java