这是main方法 String[] configs = { "classpath:applicationContext.xml", "classpath:applicationContext-quartz.xml" };
BeanFactory factory = new FileSystemXmlApplicationContext(configs);
这是spring的部分配置文件 <bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail" />
<property name="cronExpression" value="10/2 * * * * ?" />
</bean> <bean id="schedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean> <bean name="jobDetail"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass"
value="com.wasu.ini.daq.quartz.GlobalTriggerQuartzJob" />
</bean> <bean id="scanTaskDao"
class="com.wasu.ini.daq.scan.dao.imple.ScanTaskDaoImple">
<property name="sessionFactory" ref="sessionFactory" />
</bean> <bean id="scanTaskBiz"
class="com.wasu.ini.daq.scan.biz.imple.ScanTaskBizImple">
<property name="std" ref="scanTaskDao"></property>
</bean> <bean id="globalQuartz"
class="com.wasu.ini.daq.quartz.GlobalTriggerQuartzJob">
<property name="scheduler" ref="schedulerFactoryBean" />
<property name="stb" ref="scanTaskBiz"></property>
</bean> 执行这个方法的时候却报空指针异常 public void dapData() {
List<IniDataMid> list = cdb.dapData();
if (list.size() == 0) {
// not do something
} else {
distributeByCondition(list);
}
}异常如下:
java.lang.NullPointerException
at com.wasu.ini.daq.quartz.GlobalTriggerQuartzJob.isChangeFrequency(GlobalTriggerQuartzJob.java:64)
at com.wasu.ini.daq.quartz.GlobalTriggerQuartzJob.executeInternal(GlobalTriggerQuartzJob.java:52)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:79)
at org.quartz.core.JobRunShell.run(JobRunShell.java:199)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:546)
2010-02-01 22:04:20,609 ERROR [org.quartz.core.ErrorLogger] - Job (DEFAULT.jobDetail 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:210)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:546)
Caused by: java.lang.NullPointerException
at com.wasu.ini.daq.quartz.GlobalTriggerQuartzJob.isChangeFrequency(GlobalTriggerQuartzJob.java:64)
at com.wasu.ini.daq.quartz.GlobalTriggerQuartzJob.executeInternal(GlobalTriggerQuartzJob.java:52)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:79)
at org.quartz.core.JobRunShell.run(JobRunShell.java:199)
... 1 more
BeanFactory factory = new FileSystemXmlApplicationContext(configs);
这是spring的部分配置文件 <bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail" />
<property name="cronExpression" value="10/2 * * * * ?" />
</bean> <bean id="schedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean> <bean name="jobDetail"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass"
value="com.wasu.ini.daq.quartz.GlobalTriggerQuartzJob" />
</bean> <bean id="scanTaskDao"
class="com.wasu.ini.daq.scan.dao.imple.ScanTaskDaoImple">
<property name="sessionFactory" ref="sessionFactory" />
</bean> <bean id="scanTaskBiz"
class="com.wasu.ini.daq.scan.biz.imple.ScanTaskBizImple">
<property name="std" ref="scanTaskDao"></property>
</bean> <bean id="globalQuartz"
class="com.wasu.ini.daq.quartz.GlobalTriggerQuartzJob">
<property name="scheduler" ref="schedulerFactoryBean" />
<property name="stb" ref="scanTaskBiz"></property>
</bean> 执行这个方法的时候却报空指针异常 public void dapData() {
List<IniDataMid> list = cdb.dapData();
if (list.size() == 0) {
// not do something
} else {
distributeByCondition(list);
}
}异常如下:
java.lang.NullPointerException
at com.wasu.ini.daq.quartz.GlobalTriggerQuartzJob.isChangeFrequency(GlobalTriggerQuartzJob.java:64)
at com.wasu.ini.daq.quartz.GlobalTriggerQuartzJob.executeInternal(GlobalTriggerQuartzJob.java:52)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:79)
at org.quartz.core.JobRunShell.run(JobRunShell.java:199)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:546)
2010-02-01 22:04:20,609 ERROR [org.quartz.core.ErrorLogger] - Job (DEFAULT.jobDetail 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:210)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:546)
Caused by: java.lang.NullPointerException
at com.wasu.ini.daq.quartz.GlobalTriggerQuartzJob.isChangeFrequency(GlobalTriggerQuartzJob.java:64)
at com.wasu.ini.daq.quartz.GlobalTriggerQuartzJob.executeInternal(GlobalTriggerQuartzJob.java:52)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:79)
at org.quartz.core.JobRunShell.run(JobRunShell.java:199)
... 1 more
list.size() 发生空指针
// not do something
} else {
distributeByCondition(list);
}
我想根本还是cronString = stb.scanConfig(); stb没有注入进去的原因
哪里啊?
程序贴全点
@SuppressWarnings("unused")
private String frequency = "10/2 * * * * ?"; boolean flag = false; private ScanTaskBiz stb; private String cronString; private Scheduler scheduler; // 采集数据BIZ
private CompareDistributeBiz cdb; /* (non-Javadoc)
* @see org.springframework.scheduling.quartz.QuartzJobBean#executeInternal(org.quartz.JobExecutionContext)
*/
protected void executeInternal(JobExecutionContext ctx) throws JobExecutionException {
// do the actual work
System.out.println("[" + new Date() + "]start job ~~~");
isChangeFrequency();
} /**
* @description 检查采集频率是否发生改变
* @author meiwenhui created on Feb 1, 2010
*/
public void isChangeFrequency() {
cronString = stb.scanConfig(); // 得到最新的扫描频率
flag = cronString.equals(frequency); // 扫描频率是否改变
if (flag) { // 没改变
// not do something ~~~~~~
} else {
try {
// 更新扫描频率
CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger("cronTrigger", Scheduler.DEFAULT_GROUP);
trigger.setCronExpression(cronString); // 设置trigger的时间规则
scheduler.rescheduleJob("cronTrigger", Scheduler.DEFAULT_GROUP, trigger); // 重置job
} catch (Exception e) {
e.printStackTrace();
}
}
dataAcquisition();
} /**
* @description 到looking中读数据
* @author meiwenhui created on Feb 1, 2010
*/
public void dataAcquisition() {
cdb.dapData();
} // ---------setters and getters method------------// public ScanTaskBiz getStb() {
return stb;
} public void setStb(ScanTaskBiz stb) {
this.stb = stb;
} public Scheduler getScheduler() {
return scheduler;
} public void setScheduler(Scheduler scheduler) {
this.scheduler = scheduler;
} public CompareDistributeBiz getCdb() {
return cdb;
} public void setCdb(CompareDistributeBiz cdb) {
this.cdb = cdb;
}}
这个有值吗?
public void isChangeFrequency() //这个方法加try..catch看看堆栈,到底是哪行的问题
那你解析spring的配置文件,读取bean为scanTaskBiz看看代理成功没有?
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="remove*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice><!-- 哪些类的哪些方法参与事务 -->
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution(* com.gsd.test.service.*.*(..))"/>
<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
</aop:config>
FORM:QQ群Java 2 Enterprise Edition(88509302)
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml">
</property>
</bean> <bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> <tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice> <aop:config>
<aop:advisor advice-ref="txAdvice"
pointcut="execution(* com.wasu.ini.daq.*.biz.*Biz.*(..))" />
</aop:config>