Closed rocsky closed 6 years ago
v1.9.1
作业内容和调度能不能完全分开。比如:可以定义一批作业内容,在创建新的调度的时候,选择一个执行作业。在ETL的一个场景中,比如空值格式化需求,除了表名称和列名称,其他代码完全一样,表名称和列名称可以作为参数传递。但是,因为不同表数据更新的频率,到达时间不一样,所以,需要定义不同的调度。现在因为调度和作业强制绑定,只能拷贝执行代码,这样一旦需要修改程序,工作量大。举例如下: 调度1:每天0点,把用户表,用sqoop,从mysql卸数到hive用于后续分析。 调度2:每天1点,把交易表,用sqoop,从mysql卸数到hive用于后续分析。 这两个作业代码一样,只是参数不一样。现在的设计,如果需要修改代码,要修改两份,在真实环境中,可以有上百张表,会有上百份的重复代码。
如果调度和作业完全分开,新建一个调度,只需要关联一个作业就行。
你好,目前Bean模式,多个调度支持复用单个JobHandler的。针对你提到的两个需求,只需要开发一个JobHandler即可,配置多个任务,通过不同参数差异化底层逻辑。
GLUE模式不支持复用代码,不过GLUE模式在线开发,Copy代码代价很低。
可以参考上上述方案。
Which version of XXL-JOB do you using?
v1.9.1
Expected behavior
作业内容和调度能不能完全分开。比如:可以定义一批作业内容,在创建新的调度的时候,选择一个执行作业。在ETL的一个场景中,比如空值格式化需求,除了表名称和列名称,其他代码完全一样,表名称和列名称可以作为参数传递。但是,因为不同表数据更新的频率,到达时间不一样,所以,需要定义不同的调度。现在因为调度和作业强制绑定,只能拷贝执行代码,这样一旦需要修改程序,工作量大。举例如下: 调度1:每天0点,把用户表,用sqoop,从mysql卸数到hive用于后续分析。 调度2:每天1点,把交易表,用sqoop,从mysql卸数到hive用于后续分析。 这两个作业代码一样,只是参数不一样。现在的设计,如果需要修改代码,要修改两份,在真实环境中,可以有上百张表,会有上百份的重复代码。
如果调度和作业完全分开,新建一个调度,只需要关联一个作业就行。