首页 文章

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

提问于
浏览
2

我们计划从spring-batch-admin迁移到spring-cloud-dataflow,因为批处理管理员将进入Spring Attic,生命结束日期为2017年12月31日 .

根据Migration Doc中的文档,“ In the Spring Batch use case, each batch job is packaged as an independent Spring Boot über jar that is registered with Spring Cloud Data Flow

在这种情况下,如果有50个批次作业,必须创建50个超级 jar ?这样做将是一场维护噩梦,创造许多 jar 并且难以维护它们 .

任何相同的解决方法?所以我们可以将所有批量作业打包在单个超级 jar 中,我们可以在需要时随机启动任何工作吗?

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

2 回答

  • 0

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

    Why this is a good thing
    让我花一点时间来了解为什么我们认为这是一个更好的解决方案,为什么我会提出一个我不推荐的替代方案,但应该有效 .

    Breaking up the monolith
    如果您考虑大多数企业用于从开发人员的笔记本电脑向 生产环境 提供批处理功能的过程,通常是一个缓慢的过程,不经常发布 . 这个过程很慢,代码需要通过多个组(开发,一些来自外部QA,可能是某种形式的变更控制过程,最后是某种类型的操作团队来实际部署代码) . 通常,需要通过该过程的代码越小,越容易通过该过程 .

    在此示例中,对于包含50个批处理作业的系统,要更改其中一个,您需要对所有作业执行该处理 . 打破这一点实际上简化了维护,因为您可以独立地更改和部署作业 . 开发人员只需要关注手头的批处理作业 .

    Migrating to über jars
    从包含所有作业的单个WAR文件移动的另一个优点是灵活性 . 您可以根据需要在任何基础架构上运行这些作业 . 想通过 java -jar foo.jar 命令在本地或裸机上运行它?去吧 . 想通过 cf push 在CloudFoundry上运行它吗?你打赌 . 想要将应用程序停靠并在Kubernetes上运行吗?您可以!虽然你可以在不采用超级 jar 方法的情况下做同样的事情,但由于基础设施可能会从环境变为环境,因此更加细致入微 . 对于超级jar,您需要保证的只是java版本 .

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

    最后,搬到一个超级 jar 不应该那么难 . 它应该只是一个包装练习,假设您的工作定义明确 . 如果不是这样,这是一个很好的机会,可以进行一些 Health 的重组,使它们在一开始就更加模块化(良好的工程实践) .

    The alternative approach
    我想从这里开始说我不推荐这种方法 . 但是,它应该工作 .

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

    从那里,您可以通过Spring Cloud Data Flow中的50个任务定义配置50个作业 . 每个传递环境变量指示要运行的作业 . 从那里,您将能够独立执行/监视/等50个工作中的每个工作,并仍然可以获得您的单片工件 .

  • 8

    添加到“替代方法”,您可以在执行单个单片50作业jar文件时提供一个选项,以执行您想要的确切作业 .

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

相关问题