首页 \ 问答 \ 使用guava AbstractScheduledService(Using guava AbstractScheduledService)

使用guava AbstractScheduledService(Using guava AbstractScheduledService)

我正在尝试使用guava AbstractScheduledService定期执行一些任务:

public class MyService extends AbstractScheduledService {

    public MyService() {

    }

    @Override
    protected void runOneIteration() {
        doStuff();
    }

    private void doStuff() {
    // Do stuff
    }

    @Override
    protected Scheduler scheduler() {
        return Scheduler.newFixedRateSchedule(0, 8, TimeUnit.HOURS);
    }

}

所以这项服务应该每8小时定期执行一些任务,但实际上并不是这样。 继承的isRunning()方法返回false,并且永远不会调用runOneIteration()方法。

我已经设法通过从我的服务构造函数调用startAsync()方法(从父类继承startAsync()来使它工作,但我没有看到任何引用说这是应该工作的方式。

我错过了什么吗? 这是AbstractScheduledService工作方式吗?


I'm trying to execute some task periodically using guava AbstractScheduledService :

public class MyService extends AbstractScheduledService {

    public MyService() {

    }

    @Override
    protected void runOneIteration() {
        doStuff();
    }

    private void doStuff() {
    // Do stuff
    }

    @Override
    protected Scheduler scheduler() {
        return Scheduler.newFixedRateSchedule(0, 8, TimeUnit.HOURS);
    }

}

So this service should execute some task periodically every 8 hours but it never actually does. The inherited isRunning() method returns false and the runOneIteration() method never gets invoked.

I have managed to make it work by calling the startAsync() method (inherited from parent class) from my service constructor but I don't see any reference saying this is the way it should work.

Have I missed something here? Is this the way the AbstractScheduledService works?


原文:https://stackoverflow.com/questions/25499811
更新时间:2020-09-12 18:09

最满意答案

AbstractScheduledServiced实现Service 。 Service接口描述了生命周期方法,包括startAsyncServiceState枚举文字包含有关其含义的文档。 处于NEW状态的服务(刚刚创建):

处于此状态的服务处于非活动状态。 它做的工作量极少,占用资源极少。

要使服务执行某些有用的操作,您必须将其转换为RUNNING状态

此状态下的服务正在运行。

这就是为什么你必须在它做任何事之前启动服务的原因。

我还建议不要从构造函数中调用startAsync,而是从创建MyService实例的代码调用它。 在构造函数中产生如此严重的副作用(创建Threads)很少是预期的事情。


AbstractScheduledServiced implements Service. The Service interface describes lifecycle methods including startAsync. The ServiceState enum literals contain documentation on what they mean. A Service in NEW state (just created):

A service in this state is inactive. It does minimal work and consumes minimal resources.

For the Service to do something useful you have to transition it to the state RUNNING

A service in this state is operational.

That's why you have to start the Service before it does anything.

I would also advise against calling startAsync from the constructor and instead calling it from the Code that creates your MyService instance. It is rarely an expected thing to have such heavy side effects (creation of Threads) in the constructor.

2018-04-16

相关问答

更多

Google Guava供应商示例(Google Guava Supplier Example)

Supplier接口只是一个无参数函数的抽象,它返回一个值...它是获取对象的一些实例或实例的一种手段 。 既然它是如此普遍,它可以用于许多事情。 Jared解释了Multimaps工厂如何利用它作为创建某种类型值Collection的新实例的工厂。 鉴于接口的简单性,它还允许通过将Supplier的行为包装在另一Supplier ,以某种方式改变其行为,从而对Supplier的行为进行非常有力的装饰。 记忆就是一个例子。 我已经使用Suppliers.memoizeWithExpiration方 ...

覆盖spark的guava依赖版本(override guava dependency version of spark)

您正在寻找着色选项。 看到这里,但基本上你需要添加着色指令。 像这样的东西: assemblyShadeRules in assembly := Seq( ShadeRule.rename("com.google.guava.**" -> "my_conf.@1") .inLibrary("com.google.guava" % "config" % "11.0") .inProject ) 对于喜欢maven的人来说,还有相应的maven-shade-plugin。 Y ...

AbstractScheduledService:关闭底层执行程序(AbstractScheduledService: shutdown underlying executor)

您可以将执行程序用于多个服务(因为它只提供了执行代码的线程,而没有任何域知识)。 这就是为什么在停止ScheduledService时不停止执行程序是有意义的 you could use the executor for multiple services (since it only provides it's threads for executing your code without any domain knowledge). Thats why it does make sense t ...

来自Scala和Guava的Murmur3的不同结果(Different results from Murmur3 from Scala and Guava)

在我看来,像Scala的hashString将UTF-16 char的成对转换为int与Guava的hashUnencodedChars不同(没有Charset的hashUnencodedChars被重命名为)。 斯卡拉: val data = (str.charAt(i) << 16) + str.charAt(i + 1) 番石榴: int k1 = input.charAt(i - 1) | (input.charAt(i) << 16); 在Guava中,索引i处的char变为int的 ...

Guava ValueGraph的简单示例(Simple example of Guava ValueGraph)

Guava wiki提供了以下使用ValueGraph示例: MutableValueGraph<Integer, Double> weightedGraph = ValueGraphBuilder.directed().build(); weightedGraph.addNode(1); weightedGraph.putEdgeValue(2, 3, 1.5); // also adds nodes 2 and 3 if not already present weightedGraph.p ...

不兼容的库版本selenium / guava(Incompatible library version selenium / guava)

因为你对com.google.guava:guava:23.3 org.seleniumhq.selenium:selenium-java:3.0.1依赖性com.google.guava:guava:23.3使用org.seleniumhq.selenium:selenium-java:3.0.1可能会让你在十字路口。 但是Selenium发行说明清楚地提到了以下番石榴依赖性: Selenium v2.49.0 :Bump guava到19版 Selenium v3.1.0 :需要更新最新的番石 ...

检测使用哪种Guava版本?(Detect which Guava version is used? [duplicate])

您可以从guava.jar中的META-INF /下的文件中获取版本字符串。 在运行时,您需要使用适当的ClassLoader实例来加载所需的META-INF /文件。 您可以使用Guava的Resources实用程序类直接加载具有唯一名称的资源,也可以使用$someGuavaClassName.class.getClassLoader().getResources(String)在多个jar文件中遍历具有相同名称的资源。 如果你使用后者,那么你将需要使用someGuavaClassName将在你 ...

如何正确使用guava Closer(How to use guava Closer properly)

从番石榴自己的解释来看,你必须使用Throwable ,是的。 这是他们的示例代码段: public void foo() throws IOException { Closer closer = Closer.create(); try { InputStream in = closer.register(openInputStream()); OutputStream out = closer.register(openOutputStream()); // d ...

使用guava AbstractScheduledService(Using guava AbstractScheduledService)

AbstractScheduledServiced实现Service 。 Service接口描述了生命周期方法,包括startAsync 。 ServiceState枚举文字包含有关其含义的文档。 处于NEW状态的服务(刚刚创建): 处于此状态的服务处于非活动状态。 它做的工作量极少,占用资源极少。 要使服务执行某些有用的操作,您必须将其转换为RUNNING状态 此状态下的服务正在运行。 这就是为什么你必须在它做任何事之前启动服务的原因。 我还建议不要从构造函数中调用startAsync,而是从创 ...

如何使用Guava构建ConcurrentLinkedHashmap?(How to build a ConcurrentLinkedHashmap using Guava?)

ConcurrentLinkedHashmap API未移植到Guava 1:1,但CLHM的一些解决方案在MapMaker和Cache (使用CacheBuilder )中使用。 ConcurrentLinkedHashmap的作者Ben Manes回答了一个问题,可能会澄清您的疑问: ConcurrentLinkedHashMap已经集成到Guava中意味着什么? : 番石榴是长期替代品,大多数时候你应该使用它。 历史是ConcurrentLinkedHashMap找出算法,Guava包含它, ...

相关文章

更多

最新问答

更多
  • 如何保护Solr只允许SELECT请求给用户并禁止其他任何东西?(How to secure Solr to allow SELECT request to only users and disallow anything else?)
  • XPath表达式无效/错误TFHpple SWIFT 1.2(XPath Expression not working/incorrect TFHpple SWIFT 1.2)
  • css3 3D变换不能平滑地制作动画(css3 3D transform doesn't animate smoothly)
  • 运行时错误'91'和Outlook.Application = <对象变量或没有设置块变量>?(Run-time error '91' & Outlook.Application = Object variable or With block variable not set?)
  • 慢的webservice问题(Slow webservice problem)
  • textview的不正确对齐方式(Improper alignment of a textview)
  • 在第一步“Hello World”中出现Java错误(Cannot run “Hello World” program in Eclipse)
  • 为什么十六进制地址是14个字符?(why the hex address is 14 character?)
  • 如何在Python中的不同类中使用变量?(How to use variable in different classes in Python?)
  • asp:GridView HYPERLINKFIELD - datanavigateurlformatstring中的asp代码(asp:GridView HYPERLINKFIELD - asp code inside datanavigateurlformatstring)
  • 关于adaboost算法(About adaboost algorithm)
  • 在Matlab上内置图像(Built in Images on Matlab)
  • java swing:输入键事件时焦点丢失(java swing: Focus lost on enter key event)
  • C#中的通用约束,T是相同的TSomethingElse,对吧?(Generic constraints in C#, T is the same TSomethingElse, right?)
  • 从mybatis中的光标获取数据(Fetching data from cursor in mybatis)
  • 在运行时从XML构建对象的最佳方法(Best way for building objects out of XMLs at runtime)
  • 在整个窗口中拉伸sf :: Sprite(Stretch sf::Sprite across entire window)
  • Selenium Node API Web驱动程序等待超时处理程序(Selenium Node API web driver wait timeout handler)
  • 函数使用并且是map的一部分(循环依赖?)(Function uses and is part of map (circular dependency?))
  • 是否可以在C ++ 14中使用可选模板参数创建类型元组?(Is possible to make a tuple of types with optional template parameters in C++14?)
  • PHP从窗帘后面打印/ f(PHP prints /f from behind the curtains)
  • JFrame的contentPane的LayoutManager(LayoutManager of JFrame's contentPane)
  • 用于Instagram Feed的图像滚动(Image Roll Overs for Instagram Feed)
  • 如何显示拉伸字体(双倍宽度/高度)?(How to display stretched font (double width/height)?)
  • 文件操作API在fileapi.h和stdio.h中的WP8差异?(WP8 differences between file manipulation APIs in fileapi.h and stdio.h?)
  • 保存失败后Rails没有回滚事务()(Rails not rolling back transaction after failed save())
  • jqgrid中的分页问题与数组数据(Pagination problem in jqgrid with array data)
  • 重定向时,通过其他页面上的URL调用javascript函数(Call javascript function through url on otherpage while Redirecting)
  • 如何使用InvokeCommandAction调用我的方法并传入参数?(How do I go about using InvokeCommandAction to call a method of mine and pass in parameters?)
  • Jquerymobile按钮仅显示页面的第一个外观(Jquerymobile buttons are shown only first apperance of the page)