时间:2015-01-27 17:43 来源: 我爱IT技术网 编辑:52微风
直接上代码
Job1.java
package test.asm.quarz.guice; import org.quartz.Job; public interface Job1 extends Job { }Job1Impl.java
package test.asm.quarz.guice; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job1Impl implements Job1 { @Override public void execute(JobExecutionContext context) throws JobExecutionException { JobDetail1 jobDetail = (JobDetail1)context.getJobDetail();//获取injector(注意不能用注入的方法获取injector) if (jobDetail.getInjector() != null) System.out.println("可以获取到injector"); System.out.println(context.getJobDetail().getName() + "执行中..."); } }MyProcessor.java
package test.asm.quarz.guice; public interface MyProcessor { public void start() throws Exception; public void shutdown() throws Exception; }MyProcessorImpl.java
package test.asm.quarz.guice; import javax.inject.Inject; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.Trigger; import org.quartz.TriggerUtils; import com.google.inject.Injector; public class MyProcessorImpl implements MyProcessor { @Inject private Injector injector; @Inject private SchedulerFactory factory; private Scheduler scheduler; @Override public void start() throws Exception { JobDetail1 jobDetail = new JobDetail1("调度1", Scheduler.DEFAULT_GROUP, Job1Impl.class); jobDetail.setInjector(injector); jobDetail.setGroup("asm"); this.scheduler = factory.getScheduler(); Trigger trigger = TriggerUtils.makeSecondlyTrigger("调度任务1", 3, -1);//三秒执行一次,无限次数 this.scheduler.scheduleJob(jobDetail, trigger); this.scheduler.start(); } @Override public void shutdown() throws Exception { if (this.scheduler != null){ this.scheduler.shutdown(); } } }JobDetail1.java
package test.asm.quarz.guice; import org.quartz.JobDetail; import com.google.inject.Injector; public class JobDetail1 extends JobDetail { private static final long serialVersionUID = -8514865085050079759L; private Injector injector; public JobDetail1() { super(); } public JobDetail1(String name, String group, Class jobClass, boolean volatility, boolean durability, boolean recover) { super(name, group, jobClass, volatility, durability, recover); } public JobDetail1(String name, String group, Class jobClass) { super(name, group, jobClass); } public void setInjector(final Injector injector){ this.injector = injector; } public Injector getInjector(){ return this.injector; } }QuarzModule.java
package test.asm.quarz.guice; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory; import org.quartz.spi.JobFactory; import com.google.inject.AbstractModule; import com.google.inject.Scopes; public class QuarzModule extends AbstractModule { @Override protected void configure() { this.bind(SchedulerFactory.class).to(StdSchedulerFactory.class).in(Scopes.SINGLETON); this.bind(MyProcessor.class).to(MyProcessorImpl.class).in(Scopes.SINGLETON); } }测试工程GuiceQuarzDemo.java
package test.asm.quarz.guice; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Stage; public class GuiceQuarzDemo { public static void main(String[] args) throws Exception { Injector injector = Guice.createInjector(Stage.DEVELOPMENT, new QuarzModule()); MyProcessor p = injector.getInstance(MyProcessor.class); p.start(); } }其实,MyProcess和MyProcessImpl是可以合并成一个的,把start()的代码直接放到构造方法里,通过injector.getInstance(MyProcessor.class)直接启动调度,只是这样灵活性差一点。
全部代码都贴出来了,就不提供下载了。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
