我在我的dropwizard项目中使用日记本进行作业调度。我观察到,每次调度一个作业时,它都会为调度的任务创建一个新对象。是不是很糟糕的设计。另一方面,java Timer调度TimerWork,只创建一次对象,并在每个调度中调用run方法。
因此,解决DW问题的一种方法是使用托管方法。DW提供了一个名为Managed的接口,您可以向jetty注册。Jetty负责启动和停止这些任务,您可以完全控制任务的执行。使用DI框架,您可以定义自己的执行规则。
想象一下下面的类:
public class MessageTask implements Managed, Runnable {
private static final Logger log = Logger.getLogger(MessageTask.class);
private ScheduledExecutorService mainRunner = Executors.newSingleThreadScheduledExecutor(new ThreadFactoryBuilder().setDaemon(true).setNameFormat("task-%d").build());
// injected by DI or set programatically
@Inject
private long delay;
@Inject
private long period;
@Override
public void start() throws Exception {
mainRunner.scheduleAtFixedRate(this, delay, period, TimeUnit.MILLISECONDS);
}
@Override
public void stop() throws Exception {
mainRunner.shutdown();
}
@Override
public void run() {
try {
runInner();
} catch (Exception e) {
log.error("Error executing task", e);
}
}
private void runInner() throws Exception {
// do your timer task work here
}
}
这是一项有管理的任务。在DW中注册它将导致框架在服务器启动或停止时调用start和stop方法。
在类中定义一个executer(已调度),并将其实现为可运行(无需创建多个对象)
开始时,您可以按照所需的配置延迟和时间安排任务。
停止时,您将关闭计划程序。
线程池是一个deamon线程,因此它不会阻止JVM的关闭。
您需要在run方法中捕获异常,因为threadpool executor框架会在异常发生后自动删除任务。
运行内部()方法将执行您需要的任何逻辑。
配置可以通过DI框架完成(我使用的是集成了guice和DW的guicey),也可以通过编程完成,请参见:http://www.dropwizard.io/0.9.2/docs/manual/core.html#managed-物体
这当然不能真正回答你的问题——这只是一个替代解决方案。很遗憾,我从来没有使用过你的框架,所以我不能对此发表评论。但是上面是一个轻量级的解决方案,不需要任何其他框架被拉入你的应用程序。
我希望这能给一些内部。
阿图尔
我正在尝试使用dropwizer-日记本来安排工作。在我的预定工作中,我需要访问我的DAO。每当我计划的作业运行时,我都会收到以下错误... 我试图使用这个链接中描述的方法,https://github.com/timmolter/XDropWizard在注入全局对象或配置参数到作业一节中 这是我的申请代码: 这是我预定的工作: 我正在获取DAO,它们不是空的,但它们不绑定到任何会话。我该怎么解决
我不明白在spring mvc中使用dispatcher servlet只创建了一个bean对象,还是每个请求都创建了一个新对象? 控制器代码:- 在代码中,我在LoginBean对象中设置数据,并在方法abc中的modelandview对象中设置它。 然后,在jsp中,我没有为usename输入任何值,在这种情况下,当我提交表单并调用处理程序方法(initform)时,我试图打印相同的lb.ge
可运行代码: 谢谢你抽出时间。
我已经跟踪了许多如何使用Dagger实现依赖注入的示例。 上次我得到这个错误时,我彻底检查了新添加的活动和我添加的上一个活动,没有问题。 https://github.com/erikjhordan-rey/dagger2-mvp-sample/issues/1 https://github.com/google/dagger/issues/942 Android错误:找不到符号类DaggerAp
我的问题是如何创建像这样的类? (内置类型)没有属性,即使这个的是。 而且它没有使用
我发现了几份涉及mvn的类似报告,但没有一份涉及Gradle。问题是。 我去档案- 我刷新Gradle项目,检查文件- 因此,在阅读了我在stackoverflow上发现的问题后,这是我的build.gradle. 刷新。它仍然重置我的项目设置。 以下是gradle设置: 请帮忙。