就我而言,我需要运行一些计划任务(例如每分钟),在数据库中进行一些检查,如果需要,还需要一些子任务。这应该不是数据库健康检查!
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;
}
最初名字的目的是什么?它是否在某个地方使用?希望有人能帮忙。
使用拖放式-日晷,您可以轻松集成轻量级多线程 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"
我在Dropwizard应用程序中做了几乎相同的事情来定期运行作业。有一些项目,比如dropwizard作业和dropwizard石英,但这似乎很适合我的简单需求。
计划卓越服务生成器
将名称格式
作为命名线程的模式传递给线程工厂生成器
。这方面的文档可能对你有帮助:https://guava.dev/releases/snapshot/api/docs/com/google/common/util/concurrent/ThreadFactoryBuilder.html#setNameFormat(哇。