20161227 spring quartz 定时调度任务 服务 null pointer Exception 解决办法

       如果你是做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"));
}
}

发布了6 篇原创文章 · 获赞 0 · 访问量 482

猜你喜欢

转载自blog.csdn.net/zc888168/article/details/53900640