在我的例子中,我需要运行一些计划任务(例如每分钟),在数据库中进行一些检查,如果需要的话还需要一些子任务。这应该不是数据库健康检查!
DW 文档说:
"It should be noted that Environment has built-in factory methods for ExecutorService and ScheduledExecutorService instances which are managed. See LifecycleEnvironment#executorService and LifecycleEnvironment#scheduledExecutorService for details."
有谁知道如何在 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;
}
初始名称的用途是什么?是否在某处使用过?希望有人能帮忙。
最佳答案
我在 Dropwizard 应用程序中做几乎相同的事情来定期运行作业。有诸如 dropwizard-jobs 和 dropwizard-quartz 之类的项目,但这似乎可以很好地满足我的简单需求。
ScheduledExecutorServiceBuilder
将 nameFormat
作为命名线程的模式传递给 ThreadFactoryBuilder
。该文档可能对您有帮助:https://guava.dev/releases/snapshot/api/docs/com/google/common/util/concurrent/ThreadFactoryBuilder.html#setNameFormat(java.lang.String)
关于java - Dropwizard ScheduledExecutorService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26525845/