如果你是做java 的相信你一定遇有道定时任务的问题。
谨以此记载 曾经的定时任务的坑坑
如果你使用 quartz 不管使用simpletrigger 还是crontrigger 都有使用到job(Task)里面调用 其他的service 但是 其他的service又出现为null pointer excetion 的异常。究其原因是 job有新起了一个线程 这个线程 去获取service的时候,这个service还没有被初始化。终情于spring 贴代码纪念曾经的伤痛。
请使用一下工具类:
package com.xxx.yyy.utils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringContext implements ApplicationContextAware {
/**
* Spring 应用上下文环境
*/
private static ApplicationContext applicationContext;
/* static{
applicationContext=new ClassPathXmlApplicationContext("conf/spring/spring.xml");
}*/
@Override
public void setApplicationContext(ApplicationContext context)
throws BeansException {
applicationContext = context;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 获取对象
*
* @param name
* @return Object bean的实例
* @throws BeansException
*/
public static Object getBean(String beanName) throws BeansException {
if (!SpringContext.containsBean(beanName)) {
return null;
} else {
return applicationContext.getBean(beanName);
}
}
/**
* 获取类型为requiredType的对象
* 如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException)
*
* @param name
* bean注册名
* @param requiredType
* 返回对象类型
* @return Object 返回requiredType类型对象
* @throws BeansException
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static Object getBean(String name, Class requiredType)
throws BeansException {
return applicationContext.getBean(name, requiredType);
}
/**
* 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
*
* @param name
* @return boolean
*/
public static boolean containsBean(String name) {
return applicationContext.containsBean(name);
}
/**
* 判断以给定名字注册的bean定义是一个singleton还是一个prototype。
* 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
*
* @param name
* @return boolean
* @throws NoSuchBeanDefinitionException
*/
public static boolean isSingleton(String name)
throws NoSuchBeanDefinitionException {
return applicationContext.isSingleton(name);
}
/**
* @param name
* @return Class 注册对象的类型
* @throws NoSuchBeanDefinitionException
*/
@SuppressWarnings("rawtypes")
public static Class getType(String name)
throws NoSuchBeanDefinitionException {
return applicationContext.getType(name);
}
/**
* 如果给定的bean名字在bean定义中有别名,则返回这些别名
*
* @param name
* @return
* @throws NoSuchBeanDefinitionException
*/
public static String[] getAliases(String name)
throws NoSuchBeanDefinitionException {
return applicationContext.getAliases(name);
}
public static boolean isReady() {
if (applicationContext != null)
return true;
return false;
}
public static void main(String[] args) {
System.out.println(applicationContext.getBean("skyDriveOpenCommandServiceImpl"));
}
}