正在从事 Spring Hibernate 项目 我正在尝试连接到数据库并从quartzjob 中获取值。但我收到空指针异常。当我尝试使用 ApplicationContext 对象并获取它连接到数据库的 bean 时。为什么我无法以其他方式执行
public class JobScheduler extends QuartzJobBean {
@Autowired
private SourceDaoImpl sourceDao;
@Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
Client client = new Client();
client.setClientKey(300);
sourceDao.getSourceByClient(client); **//error**
}
public SourceDaoImpl getSourceDao() {
return sourceDao;
}
public void setSourceDao(SourceDaoImpl sourceDao) {
this.sourceDao = sourceDao;
}
}
这是我的applicationcontext.xml
<!-- scheduler -->
<bean id="jobScheduler" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.dca.scheduling.JobScheduler" />
<property name="jobDataAsMap">
<map>
<entry key="timeout" value="5" />
</map>
</property>
</bean>
<bean id="cronTriggerjobScheduler" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobScheduler" />
<property name="cronExpression" value="0/10 * * * * ?" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="jobDetails">
<list>
<ref bean="jobScheduler" />
</list>
</property>
<property name="triggers">
<list>
<ref bean="cronTriggerjobScheduler" />
</list>
</property>
</bean>
<bean id="jobClass"
class="com.dca.scheduling.JobScheduler">
</bean>
这是异常(exception)
ERROR 04-06 07:22:55,009 - Job DEFAULT.jobScheduler threw an unhandled Exception:
java.lang.NullPointerException
at com.dca.scheduling.JobScheduler.executeInternal(JobScheduler.java:21)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
at org.quartz.core.JobRunShell.run(JobRunShell.java:216)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
ERROR 04-06 07:22:55,010 - Job (DEFAULT.jobScheduler threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: java.lang.NullPointerException]
at org.quartz.core.JobRunShell.run(JobRunShell.java:227)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
Caused by: java.lang.NullPointerException
at com.dca.scheduling.JobScheduler.executeInternal(JobScheduler.java:21)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
at org.quartz.core.JobRunShell.run(JobRunShell.java:216)
... 1 more
hibernate .xml
<bean id="sourceInstanceDao" class="com.dca.dao.impl.SourceInstanceDaoImpl">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
最佳答案
Quartz 在它自己的上下文中运行,即使是由 Spring 便捷方法启动的,所以实际上你最终不会获得整个 Spring 应用程序上下文,除非你显式地在 JobDataMap 中传递 bean
<bean id="jobScheduler" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.vxl.appanalytix.dca.scheduling.JobScheduler" />
<property name="jobDataAsMap">
<map>
<entry key ="sourceDao" value-ref="sourceDao"/>
<entry key="timeout" value="5" />
</map>
</property>
</bean>
我的作业调度程序类
protected void executeInternal(JobExecutionContext jobContext)
throws JobExecutionException {
Client client = new Client();
client.setClientKey(300);
sourceDao= (SourceDaoImpl) jobContext.getJobDetail()
.getJobDataMap().get("sourceDao");
}
关于java - 空指针异常 Quartz 与 Spring 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16916788/