Dropwizard ScheduledExecutorService

use*_*180 14 java scheduled-tasks dropwizard

在我的情况下,我需要运行一些计划任务(例如每分钟)在DB中进行一些检查,如果需要,还需要一些子任务.这应该是没有DB健康检查!

DW文档说:

"应该注意,Environment有针对ExecutorService和ScheduledExecutorService实例的内置工厂方法.有关详细信息,请参阅LifecycleEnvironment#executorService和LifecycleEnvironment#scheduledExecutorService."

有谁知道如何在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);
Run Code Online (Sandbox Code Playgroud)

这是DW中正确的方法吗?BTW一个可运行的假人:

  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;
      }
Run Code Online (Sandbox Code Playgroud)

什么是初始名称的目的,是否在某处使用?希望有人能提供帮助.

小智 9

我在Dropwizard应用程序中做同样的事情来定期运行作业.有一些项目,如dropwizard-jobs和dropwizard-quartz,但这似乎可以满足我的简单需求.

ScheduledExecutorServiceBuilder将nameFormat传递给ThreadFactoryBuilder,作为命名线程的模式.该文档可能对您有所帮助:http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/util/concurrent/ThreadFactoryBuilder.html#setNameFormat(java.lang.String)

  • 此答案中提供的链接不再存在.请参阅[更新的文档链接](https://google.github.io/guava/releases/20.0/api/docs/com/google/common/util/concurrent/ThreadFactoryBuilder.html#setNameFormat-java.lang.String - ) (2认同)