gpt4 book ai didi

java - 用java管理预定的作业

转载 作者:太空宇宙 更新时间:2023-11-04 07:16:40 24 4
gpt4 key购买 nike

我有一个复杂的 Java Web 应用程序。它包含:

  1. 由maven存储和管理的不同库模块
  2. 可扩展到云中许多服务器的网络模块
  3. 数据库:sql + nosql
  4. 许多不同的计划作业与数据库一起使用。

我需要有关如何开发和管理此预定作业的建议。我的要求:

  1. 作业应与 Web 模块分开,因为 Web 层会在 amazon ec2 insanses 上自动扩展。
  2. 有些工作需要金钱来完成非常重要的工作,所以我需要一个非常好的工具来监控工作结果、工作状态、日志等。我需要能够进行非常快速的修补程序以及实时单独停止\启动\取消(如果由于某种原因卡住)特定工作的能力。
  3. 当一切正常时,我需要使用持续交付(CD)。这意味着作业构建在 CI 服务器上并自动部署到测试\生产服务器。计划时间的配置也必须受到版本控制。

我查看了一些解决方案:

  1. 职位服务器如 obsidian 。不要认为使用这样的怪物解决方案是个好主意。
  2. quartz 。我找不到一种简单的方法来合并需求 2 和 3。使用quartz,我可以实时管理我的工作或为工作制作一个好的 CD 版本。不在一起。也许我错过了什么?
  3. 将作业 jar 与所有库一起部署到目标服务器并运行脚本 从 cron 运行该脚本。这个解决方案看起来很难看。首先,我需要在每次部署时将 CI 服务器中的所有库部署到测试\生产服务器,以保持 CI 流程干净。其次,我真的不认为这是一个好主意。我真的认为我错过了一些东西,并且对于这个常见问题有一个很好的解决方案。

你能给我建议吗?开发人员通常如何通过CD流程管理预定作业?

最佳答案

我认为您一定正在使用一些应用程序服务器,例如 JBoss 或 WebLogic。

我建议编写一个 Service MBean,它将使用quartz 加载您的计划作业

使用 Service MBean 的好处是可以公开操作。调用这些操作您应该能够停止启 Action 业。

QuartZ 的好处是它非常可靠。您将能够管理个人工作。

这里要注意的是,您的 Service MBean 下只有一个调度程序(对象)实例。因此,如果您停止调度程序,您就会停止所有作业。

您可以创建一个单独的记录器类别来处理 QuartZ 作业

请提供更多输入信息,例如您正在使用哪个应用程序服务器。不同的应用程序服务器具有不同的可能有用的功能。尽管您应该能够在其中任何一个中实现您的所有想法

我有一个类似的应用程序在 JBoss AS7 上运行,每个作业都是一个独立的线程在作业的执行逻辑中,我这样做

Thread.currentThread().setName(UNIQUE_NAME_TIMESTAMP);

通过这种方式,我可以标记每个周期特定作业的执行。

quartz. I Can not find a simple way how to merge the requirements number 2 and 3. With quartz i can manage my jobs in real time or make a good CD build for jobs. Not together. Maybe i am miss something ?

您确实需要像 JBoss 这样的应用程序服务器。它可以为您提供稳定的 Web 容器,经过完全 Java EE 认证,简化您的 API 集成。

----==----==---==----==---==----==---==----==---==----==---==----==----

我希望你知道如何编写 SAR。如果还没有,那也很容易。我喜欢 JBoss,因为它的概念简单、易于使用并且是非常强大的应用服务器。

您可以查看这个特定的教程博客以了解如何编写服务 MBean http://middlewaremagic.com/jboss/?p=366

让我们谈谈 MyServerMonitorMBean

package custom.mbean;
public interface MyServerMonitorMBean
{
public void setFrequency(String frequency);
public String getFrequency();
}

正如您所注意到的,有一些方法声明需要通过 MBean 的实现来实现。

在 Java EE 架构中,这意味着您实际上正在公开操作。可以从外部调用的操作来调用某些命令。现在只有在接口(interface) MBean 中声明的方法才有这个概念。

然后您可以通过 jconsole 连接到 JBoss JMXconsole。您可以在这里查看

https://community.jboss.org/wiki/UsingJconsoleToConnectToJMXOnAS7

----==----==========================================

--1-- This will open up connection which will allow you to view running MBeans over the server (that would be MBean tab of the JConsole after connection)

--2-- your mbean will be service.server.monitor (name taken from previous example)

--3-- you will find the actions showing up as operations

--4-- if you have declared the methods to have some arguments you will see there is individual value holder for those method arguments which you can pass to the service

--5-- in my code I had exposed jobStart and jobStop as two actions

@Override
public void jobStart() {
this.loadJob(SchedHourlyJob.class, "hourlyjob", "grouphourly", START_INTERVAL, EXECUTION_INTERVAL);
}

@Override
public void jobStop() {
logger.info("-- jobStop. Stopping Scheduled Job");

try {
scheduler.deleteJob(new JobKey("hourlyjob", "grouphourly"));
} catch (SchedulerException schedEx) {
logger.error("Failed to stop scheduled job. Exception message and stacktrace ==> " ,schedEx);
}
}

--6-- Expose similar actions to start stop or change the individual job or complete scheduler.

--7-- You will also be able to pause the job induce some change and start it back. All these manipulation makes Quartz such a nice API for job scheduling

--8-- In JBoss hot deployment is possible. You can have you application in multiple sar's which will share common libraries. You can do testing around these features of JBoss. I understand hot deployment is something you will be highly focusing at.

我希望我已经很好地解释了这个逻辑。这也是处理此问题的一种方法,您也可以想出自己的方法。

请记住,实现是您处理需求的方式。

刚才我想,创建类名称、作业名称可以形成一种非常通用的方式来停止或暂停公共(public)类(Service MBean)中的作业。正如我之前所说,所有想法都需要进行测试。因此我正在考虑如果掌握了它,你就能想出一个好的解决方案

再思考一下,您甚至可以通过 JMS 来实现操作的调用,从其对象中编写一个模型类并将其发送到您的服务器。但话又说回来,你总是可以想出一个办法来停止你的工作。

关于java - 用java管理预定的作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19870607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com