DeltaSpike笔记Scheduler Module

1.依赖关系

<dependency>
    <groupId>org.apache.deltaspike.modules</groupId>
    <artifactId>deltaspike-scheduler-module-api</artifactId>
    <version>${deltaspike.version}</version>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>org.apache.deltaspike.modules</groupId>
    <artifactId>deltaspike-scheduler-module-impl</artifactId>
    <version>${deltaspike.version}</version>
    <scope>runtime</scope>
</dependency>
2.声明外部依赖

默认此模块是与Quartz集成.

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.1</version>
</dependency>


3.特性

只需要将注释@Scheduled 加到你的Quartz-jobs上,他们将会在引导过程中自动传递给调度器.

@Scheduled(cronExpression = "0 0/10 * * * ?")
public class CdiAwareQuartzJob implements org.quartz.Job
{
    @Inject
    private MyService service;

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException
    {
        //...
    }
}
下面是一个cdi依赖注入进行开启的demo.
DeltaSpike的容易模块也是必须的.他们通过@Scheduled#startScopes来控制任务的开启关闭.
如下
@ApplicationScoped
public class ProjectStageAwareSchedulerController
{
    @Inject
    private Scheduler<Job> jobScheduler;

    @Inject
    private ProjectStage projectStage;

    public void registerJobs()
    {
        if (ProjectStage.Production.equals(this.projectStage))
        {
            //see 'false' for @Scheduled#onStartup
            this.jobScheduler.scheduleJob(ManualCdiAwareQuartzJob.class);
        }
    }

    @Scheduled(cronExpression = "0 0/10 * * * ?", onStartup = false)
    public class ManualCdiAwareQuartzJob implements org.quartz.Job
    {
        @Inject
        private MyService service;

        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException
        {
            //...
        }
    }
}
4.手动调度器控制
DeltaSpike的SPI扩展,允许手动控制调度程序.
通过标准的cdi注入,如:
@Inject
private Scheduler<Job> jobScheduler;
可以手动启动/停止调度程序,pause/resume/interrupt/check scheduled 工作,手动注册工作或开始工作一次,
注入方法要避免与系统其他特性的冲突,最好使用
public class QuartzSchedulerProducer
{
    @Produces
    @ApplicationScoped
    protected Scheduler<Job> produceScheduler(Scheduler scheduler)
    {
        return scheduler;
    }
}
或者
<alternatives>
  <class>org.apache.deltaspike.scheduler.impl.QuartzSchedulerProducer</class>
</alternatives>



当然,你也可以不使用 Quartz,而去使用其他的.具体apache也没说.可以google搜搜.


你可能感兴趣的:(DeltaSpike笔记Scheduler Module)