我正在使用WebSphere Liberty(wlp)和JAX-RS开发服务。 我想在我的服务中运行多个调度程序,以定期执行不同的任务。 我已经安装了 concurrent-1.0 功能并定义了
的实例@Resource(name ="DefaultManagedScheduledExecutorService")
private ManagedScheduledExecutorService myScheduler;
在我的init类中实现ServletContextListener
如何在其他一些类中创建更多实例?
我可以找到ManagedExecutorService
的指针,如:
http://www.adam-bien.com/roller/abien/entry/injecting_an_executorservice_with_java
我已经尝试使用ManagedScheduledExecutorService
,但它没有用。
但是我无法获得ManagedScheduledExecutorService
资源的大量信息。
请提供在此处有用的任何链接或指示。
答案 0 :(得分:2)
您目前使用的注入示例正在使用默认ManagedScheduledExecutorService,该功能在您启用concurrent-1.0
功能后即可使用。
要配置其他ManagedScheduledExecutorService,您只需在server.xml配置中定义更多内容,如下所示:
<managedScheduledExecutorService jndiName="concurrent/exec1"/>
<managedScheduledExecutorService jndiName="concurrent/exec2"/>
<managedScheduledExecutorService jndiName="concurrent/exec3"/>
但是,除非他们要为不同的任务应用不同的上下文服务配置,否则你真的没有理由需要额外的ManagedScheduledExecutorService。例如:
<managedScheduledExecutorService jndiName="concurrent/classloaderExec">
<contextService>
<classloaderContext/>
</contextService>
</managedScheduledExecutorService>
<managedScheduledExecutorService jndiName="concurrent/jeeMetadataExec">
<contextService>
<jeeMetadataContext/>
</contextService>
</managedScheduledExecutorService>
如果您只想安排不同的任务,比如myHourlyTask
和myDailyTask
,您仍然可以使用相同的ManagedScheduledExecutorService资源执行此操作:
myScheduler.scheduleAtFixedRate(myHourlyTask, 0, 1, TimeUnit.HOURS);
myScheduler.scheduleAtFixedRate(myDailyTask, 0, 1, TimeUnit.DAYS);
在任何非资源类中声明和使用ManagedScheduledExecutorService
默认资源实例:
/** The scheduler. */
private ManagedScheduledExecutorService monkeyScheduler;
try {
monkeyScheduler = (ManagedScheduledExecutorService)
new InitialContext().lookup("java:comp/DefaultManagedScheduledExecutorService");
} catch (NamingException e) {
e.printStackTrace();
}
答案 1 :(得分:1)
查看此页面Configuring managed scheduled executors,了解有关如何配置托管执行程序的详细信息。
您应该能够使用一个执行程序,只需为您的不同任务调用多个executor.schedule*
方法。