javaweb|用quartz开发调度任无法注入bean,出现空指针问题

【javaweb|用quartz开发调度任无法注入bean,出现空指针问题】


开发job类时候,@Autowired注解不起作用,出现空指针异常:
原因:因为@Autowired是把属性注入到了Spring注入的job类实例中。而我们的job类中方法执行时候,quartz会重新实例化一个jobClass,这个实例和Spring注入的实例是不同的,所以没有属性,属性就是空的。
网上找了很多方法都是说重新SpringBeanJOBFactory,我试了,不管用。
网上有个方法可以用,重写ApplicationContextAware,在job的execute()中获取bean,具体实现如下:

package com.operation.quartzManger; import java.util.Locale; import com.operation.mapper.SystemView; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; /** * 系统bean帮助类 */ public class SpringContextUtil implements ApplicationContextAware{ private static ApplicationContext context; @Override @SuppressWarnings("static-access" ) public void setApplicationContext(ApplicationContext contex) throws BeansException { // TODO Auto-generated method stub this.context = contex; } public static Object getBean(String beanName){ return context.getBean(beanName); } public static String getMessage(String key){ return context.getMessage(key, null, Locale.getDefault()); } }

将帮助类注入spring

Job类中执行方法是调用:

SystemView systemView=(SystemView) SpringContextUtil.getBean("systemView");


systemView.updateSysStatusByID(sysUUID,"1","系统正常");

测试系统正常。








    推荐阅读