java Timetask 访问service 抛空指针异常解决方案
错误原因: 创建自己的timetask 定时器继承了TimerTask之后,当执行run时还未进行service的注入。此时抛出空指针异常;以下为最终解决方案
// 自定义的TimerTask
public class WXFocusTask extends TimerTask {
public WXFocusTask(String openid){
this.openid=openid;
}
private String openid;
public void run() {
WxfocusMgrImp wxMgr = (WxfocusMgrImp)ApplicationContextUtil.getBean("wxfocusMgr");
List list = wxMgr.findWf(openid);
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Wxfocus wxf = list.get(i);
wxf.setBindmark("2");
wxMgr.update(wxf);
}
}
System.out.println("user openid name is:" + openid + "timetask working");
}
public String getOpenid() {
return openid;
}
public void setOpenid(String openid) {
this.openid = openid;
}
}
//AppliactionContextUtil 取bean工具类
public class ApplicationContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public void setApplicationContext(ApplicationContext applicationContext) {
ApplicationContextUtil.applicationContext = applicationContext;
}
public static Object getBean(String beanName) {
return applicationContext.getBean(beanName);
}
}