【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","系统正常");
测试系统正常。
推荐阅读
- javaweb|基于Servlet+jsp+mysql开发javaWeb学生成绩管理系统
- =======j2ee|spring用注解实现注入的@resource,@autowired,@inject区别
- jar|springboot项目打成jar包和war包,并部署(快速打包部署)
- 数据库|效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)...
- java人生|35K 入职华为Java开发那天,我哭了(这 5 个月做的一切都值了)
- Java毕业设计项目实战篇|Java项目:在线嘿嘿网盘系统设计和实现(java+Springboot+ssm+mysql+maven)
- 微服务|微服务系列:服务发现与注册-----Eureka(面试突击!你想了解的Eureka都在这里.持续更新中......)
- c#|11、C#处理程序异常的技术
- JavaWeb|JavaWeb学习——CSS
- JavaWeb|JavaWeb学习——用户注册(14)