【问题标题】:Running a Spring Boot App on Azure WebJob with a Schedule使用计划在 Azure WebJob 上运行 Spring Boot 应用程序
【发布时间】:2018-08-15 21:56:34
【问题描述】:

我有一个每天晚上运行的常规 Java/Spring Batch 作业,以从一个数据库中获取数据并在我的项目数据库中插入/更新。这在部署在 Tomcat 上的当前设置中运行良好。

现在我需要将它分离出来并在 Azure WebJob 上运行它。什么是好的方法?

我可以为此目的使用 Spring Boot 吗? 但我不确定它将如何工作。我的意思是,我可以创建我的项目的 JAR(使用 Spring Boot 编写的作业)并将其复制到 Azure WebJob。然后有一个带有“java -jar ...”的批处理文件但是:

  • 这难道不是像运行和部署 Spring Boot 应用程序一样使用它的内置网络服务器,一旦我运行它就会继续运行?
  • 其次,下一次 Azure WebJob 按照我设置的计划执行批处理文件时,它将尝试再次运行 Spring Boot 应用程序,我可能会遇到绑定异常,因为该端口从第一次运行开始就已在使用中.

如果有人可以帮助我这样做,将不胜感激。

谢谢。

【问题讨论】:

    标签: java spring-boot spring-batch azure-webjobs azure-webjobssdk


    【解决方案1】:

    这会不会就像运行和部署 Spring Boot 应用程序一样,它内置的网络服务器会在我运行后继续运行?

    Spring Boot 应用程序可以是非 Web 应用程序,一个很好的例子是不依赖于 servlet 容器的 Spring Boot 批处理应用程序。

    您可以创建一个 Spring Boot 应用程序来运行您的 Spring Batch 作业,然后在作业完成时停止,而无需将其部署在(嵌入式)Tomcat 中。你可以在这里找到一个例子:https://spring.io/guides/gs/batch-processing/

    其次,下次 Azure WebJob 按照我设置的计划执行批处理文件时,它将尝试再次运行 Spring Boot 应用程序,我可能会遇到绑定异常,因为该端口从第一次运行开始就已在使用中.

    一旦您有了使用java -jar mybatchapp.jar 运行应用程序的脚本,您就可以在需要时使用 Azure 调度程序来运行您的作业。由于您的批处理应用程序不包含/启动嵌入式 servlet 容器,因此您不会遇到端口冲突。

    【讨论】:

    • 感谢您的热情回复,不胜感激!顺便问一下,您是否有或知道是否有这样的样本可以将数据从一个数据库表读取到另一个数据库表?
    • 我通过thisthis 链接尝试了一个,但它不起作用。我只是想在一个数据库中执行此操作,从一个表中获取数据并插入到另一个表中。它什么也不做,也不给出任何错误。
    • 很高兴它有帮助!如果它回答了您的问题,请接受答案。关于从一个表读取数据并写入另一个表的示例,您可以在此处的spring批处理示例模块中找到示例:github.com/spring-projects/spring-batch/blob/master/…
    • 要在 azure 门户中部署 Web 作业,我们是否需要先创建 VPC。或者我们可以在不创建 VPC 的情况下直接部署我们的网络作业?请建议
    猜你喜欢
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2019-10-14
    • 2018-05-13
    • 2014-10-08
    相关资源
    最近更新 更多