首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dropwizard ScheduledExecutorService

Dropwizard ScheduledExecutorService
EN

Stack Overflow用户
提问于 2014-10-23 10:11:52
回答 2查看 8.3K关注 0票数 14

在我的例子中,我需要运行一些调度的任务(例如,每分钟),在DB中执行一些检查,如果需要的话,运行一些子任务。这不应该是DB健康检查!

数据仓库文件说:

“应该注意的是,环境已经为管理的ExecutorService和ScheduledExecutorService实例内置了工厂方法。详细信息请参见LifecycleEnvironment#executorService和LifecycleEnvironment#scheduledExecutorService。”

有人知道如何在DW中实现这一点吗?在尝试使用DW代码的可能性时,我发现如下:

代码语言:javascript
复制
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的正确做法吗?顺便说一句,一个可跑的假人:

代码语言:javascript
复制
  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;
      }

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-26 23:28:48

在Dropwizard应用程序中,我也在做同样的事情,定期运行一个作业。有些项目,如下拉向导-作业和下拉向导-石英,但这似乎可以很好地满足我的简单需求。

ScheduledExecutorServiceBuildernameFormat传递给ThreadFactoryBuilder作为命名线程的模式。这方面的文档可能会对您有所帮助:https://guava.dev/releases/snapshot/api/docs/com/google/common/util/concurrent/ThreadFactoryBuilder.html#setNameFormat(java.lang.String)

票数 9
EN

Stack Overflow用户

发布于 2015-03-02 13:36:02

使用辍学向导-日晷,您可以轻松地集成轻量级多线程Java作业调度库日晷,并使用SimpleTriggerCronTrigger添加作业。在您的示例中,首先使用一个用SimpleTrigger注释定义作业逻辑的类:

代码语言:javascript
复制
@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-sundial应该搜索带注释的作业类的包。下面是一个使用annotated-jobs-package-name配置param的示例配置以及其他几个可选参数,用于对调度程序进行微调:

代码语言:javascript
复制
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异步控制调度器,以执行锁定和解锁调度器、启动、停止、添加、删除作业和触发器等操作。以下是几个例子:

代码语言:javascript
复制
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"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26525845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档