当前位置: 首页 > 知识库问答 >
问题:

Dropwizard ScheduledExecutorService

赵嘉纳
2023-03-14

就我而言,我需要运行一些计划任务(例如每分钟),在数据库中进行一些检查,如果需要,还需要一些子任务。这应该不是数据库健康检查!

DW 文档说:

"需要注意的是,环境为管理的ExecutorService和schduledExecutorService实例提供了内置的工厂方法。有关详细信息,请参阅生命周期环境#执行周期服务和生命周期环境#计划执行周期服务。"

有谁知道如何在DW中实现这一点?试图尝试使用DW代码的可能性,我发现了以下内容:

String nameFormat = "?What should this string contain?";
ScheduledExecutorServiceBuilder sesBuilder = environment.lifecycle().scheduledExecutorService(nameFormat);
ScheduledExecutorService ses = sesBuilder.build();
Runnable alarmTask = new AlarmTask();
ses.scheduleWithFixedDelay(alarmTask, 0, 5, TimeUnit.SECONDS);

这是DW的正确方法吗?顺便说一下,可运行的虚拟机

  private static final class AlarmTask implements Runnable {
      DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
      Calendar cal = Calendar.getInstance();
        @Override public void run() {
          ++fCount;

            cal = Calendar.getInstance();
            System.out.println(fCount + "x BEEP:" + dateFormat.format(cal.getTime()));
        }
        private int fCount;
      }

最初名字的目的是什么?它是否在某个地方使用?希望有人能帮忙。

共有2个答案

陆雅志
2023-03-14

使用拖放式-日晷,您可以轻松集成轻量级多线程 Java 作业调度库日晷,并使用简单触发器CronTrigger 添加作业。在你的情况下,你会从一个类开始,用一个简单的Trigger注释来定义你的作业逻辑:

@SimpleTrigger(repeatInterval = 60, timeUnit = TimeUnit.SECONDS)    
public class SampleJob extends com.xeiam.sundial.Job {

  @Override
  public void doRun() throws JobInterruptException {
    // Do something interesting...
  }
}

在Dropwizard应用程序的yaml文件中,您需要定义包dropwizard-日晷应该搜索注释的作业类。以下是一个示例配置,其中包含annotated-jobs-pack-name配置参数以及其他几个用于微调调度程序的可选参数:

sundial:
  thread-pool-size: 10
  shutdown-on-unload: true
  wait-on-shutdown: false
  start-delay-seconds: 0
  start-scheduler-on-load: true
  global-lock-on-load: false
  annotated-jobs-package-name: com.foo.bar.jobs

此外,您可以在应用程序运行时通过Curl异步控制调度程序,以执行锁定和解锁调度程序、启动、停止、添加、删除作业和触发器等操作。以下是几个例子:

curl -X POST http://localhost:9090/admin/tasks/locksundialscheduler
curl -X POST http://localhost:9090/admin/tasks/unlocksundialscheduler
curl -X POST "http://localhost:9090/admin/tasks/startjob?JOB_NAME=MyJob"
刁英朗
2023-03-14

我在Dropwizard应用程序中做了几乎相同的事情来定期运行作业。有一些项目,比如dropwizard作业和dropwizard石英,但这似乎很适合我的简单需求。

计划卓越服务生成器名称格式作为命名线程的模式传递给线程工厂生成器。这方面的文档可能对你有帮助:https://guava.dev/releases/snapshot/api/docs/com/google/common/util/concurrent/ThreadFactoryBuilder.html#setNameFormat(哇。

 类似资料:

相关问答

相关文章

相关阅读