从 spring-batch-admin 迁移到 spring 云数据流

Migrating from spring-batch-admin to spring cloud dataflow

我们计划从 spring-batch-admin 迁移到 spring-cloud-dataflow,因为 batch admin 将移至生命周期结束的 Spring Attic日期为 2017 年 12 月 31 日。

根据 Migration Doc 中的文档,“在 Spring 批处理用例中,每个批处理作业都打包为一个独立的 Spring Boot über jar,它已注册 Spring Cloud Data Flow

在这种情况下,如果有 50 个批处理作业,则必须创建 50 个 über jar?这样做将是一场维护噩梦,创建许多 jar 并维护它们将很困难。

是否有相同的解决方法?这样我们就可以将所有批处理作业打包在一个 über jar 中,并且我们可以在需要时随机启动任何作业?

非常感谢任何帮助,提前致谢

TL;DR;
在此处观看我关于将数据处理迁移到微服务的演讲:https://www.youtube.com/watch?v=COzkPkHZMG8。如果在那之后你仍然觉得这是一件坏事,请跳到底部,我提出了另一种(不推荐)方法。

为什么这是一件好事
让我花一点时间来解释一下为什么我们认为这是一个更好的解决方案,以及为什么我不鼓励您采用单一方法。毕竟,我会提出一个我不推荐但应该可行的替代方案。

打破整体
如果您考虑一下大多数企业将批处理功能从开发人员的笔记本电脑交付到生产环境的过程,这通常是一个缓慢的过程,而且很少发布。这个过程很慢,代码可能需要通过多个组(开发,一些来自外部 QA,可能是某种形式的变更控制过程,最后是某种类型的运营团队来实际部署代码)。通常,需要通过该过程的代码越小,就越容易通过该过程。

在此示例中,对于包含 50 个批处理作业的系统,要更改一个作业,您需要对 所有 个作业执行该过程。分解它实际上简化了维护,因为您可以独立更改和部署作业。开发人员只需专注于手头的批处理作业。

迁移到 über jars
将所有作业打包在一个 WAR 文件中的另一个优点是灵活性。您可以 运行 这些工作,但是您可以在任何您想要的基础设施上进行。想通过 java -jar foo.jar 命令在本地或裸机上 运行 吗?去吧。想通过 cf push 在 CloudFoundry 上 运行 它吗?你打赌。想要将应用程序 dockerize 并 运行 在 Kubernetes 上?你可以!虽然您可以在不使用 über jar 方法的情况下做同样的事情,但它更加细微,因为基础设施可能会因环境而异。如果是 über jar,你只需要保证 java 版本。

工件管理部分也是一个很好解决的问题。将 über jars 推送到 Maven 存储库是一个简单的过程,在 java 领域得到了很好的审查。如何管理 WAR 文件真的不是。您可以将它们推送到 Maven 存储库,但这并不理想。通过迁移到 über jars,你的发布过程在所有工作(以及你所有的应用程序)中变得非常标准化。

最后,转移到 über jar 应该不会那么难。假设您的工作定义明确,它实际上应该只是一个打包练习。如果不是,这是进行一些健康重组的好机会,以便它们首先更加模块化(良好的工程实践)。

替代方法
首先,我想说我 推荐这种方法。但是,它应该可以工作。

不是为每个作业创建一个 über jar,而是创建一个包含所有 50 个作业的 über jar。您需要创建自己的 CommandLineRunner 来查看环境变量以确定启动时要 运行 的作业,并关闭 Spring 启动功能以在启动时自动执行您的作业。

从那里,您将通过 Spring 云数据流中的 50 个任务定义配置您的 50 个作业。每一个都将指示作业的环境变量传递给 运行。从那里,您将能够独立 execute/monitor/etc 50 个工作中的每一个,并且仍然可以获得您的整体工件。

添加到 "alternative approach",您可以在执行单个整体 50 作业 jar 文件时提供一个选项以执行您想要的确切作业。

java -jar single.jar -Dspring.batch.job.names=jobName