2017-09-25 4 views
3

私はスケジューリングのために私のApacheのisisプロジェクトで石英を使用しています。私はorg.quartz.Jobを実装するMyJobクラスを持っていて、スケジューラーが与えられた時間にトリガーするときに呼び出されるexecuteメソッドを持っています。Apache isisでサービスを注入できない石英

私の問題は、クラスDemoServiceがあり、executeメソッドから呼び出すメソッドshowDemo()があることです。 しかし、スケジューラが実行されると、ヌルポインタ例外がdemoService.showDemo()にスローされます。

私はそのクラスにサービスを注入できませんでした。それは常にNPEを与えます。 MyJobクラスにどのようにサービスを注入できますか?

public class MyJob implements Job { 

    @Inject 
    DemoService demoService; 

    public MyJob() { 

    } 

    @Override 
    public void execute(JobExecutionContext context) throws JobExecutionException { 
     demoService.showDemo(); 
    } 
} 

答えて

1

最も簡単な方法は、あなたがAbstractIsisSessionTemplateのサブクラスで実行するロジックを入れ、その後、あなたの石英の仕事からそれをインスタンス化し、実行することです - :ここで

はコードです。

この手法は、Incode Platformのクォーツジョブによってバックグラウンドコマンドを実行するために使用されます。hereを参照してください。 quartz moduleは石英の視点からこれを示しています(あなたがすでに考え出したと思います)。

HTH ダン

+0

こんにちはダンを行うときに、このソリューションは、働いていました。ありがとう。 –

0

あなたはSpringのautowired豆でジョブを作成するためにSpringBeanJobFactoryを使用する必要があり、このNullPointerException while deploying Quartz in Spring Boot

を試してみてください。

クラスAutowiringSpringBeanJobFactory extends SpringBeanJobFactoryは、ApplicationContextAware { private transient AutowireCapableBeanFactory beanFactoryを実装します。

public void setApplicationContext(final ApplicationContext context) { 
    beanFactory = context.getAutowireCapableBeanFactory(); 
} 

@Override 
public Object createJobInstance(final TriggerFiredBundle bundle) throws Exception { 
    final Object job = super.createJobInstance(bundle); 
    beanFactory.autowireBean(job); //the magic is done here 
    return job; 
} 

} そして、あなたは

SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory(); 
scheduler = schedFact.getScheduler(); 

AutowiringSpringBeanJobFactory autowiringSpringBeanJobFactory = new AutowiringSpringBeanJobFactory(); 
autowiringSpringBeanJobFactory.setApplicationContext(applicationContext); 
scheduler.setJobFactory(autowiringSpringBeanJobFactory); 
関連する問題