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"));
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值