用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

<bean id="SpringContextUtil" class="com.operation.quartzManger.SpringContextUtil"></bean>
Job类中执行方法是调用:

SystemView systemView=(SystemView) SpringContextUtil.getBean("systemView");
 
 
systemView.updateSysStatusByID(sysUUID,"1","系统正常");
测试系统正常。





 
 

猜你喜欢

转载自blog.csdn.net/super_wu1992/article/details/78491717
今日推荐