今天在工作中遇到一个问题,在项目中的定时任务调用Mapper层的代码,出现空指针异常。最后在百度和请教前辈的基础上,解决了该问题,接下来做个总结:
首页要添加一个Spring的工具类代码如下:
public class SpringContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextHolder.applicationContext = applicationContext;
}
public static void setContext(ApplicationContext applicationContext) {
if (SpringContextHolder.applicationContext==null) {
SpringContextHolder.applicationContext = applicationContext;
}
}
public static ApplicationContext getApplicationContext() {
assertApplicationContext();
return applicationContext;
}
@SuppressWarnings("unchecked")
public static <T> T getBean(String beanName) {
assertApplicationContext();
return (T) applicationContext.getBean(beanName);
}
public static <T> T getBean(Class<T> requiredType) {
assertApplicationContext();
return applicationContext.getBean(requiredType);
}
private static void assertApplicationContext() {
if (SpringContextHolder.applicationContext == null) {
throw new RuntimeException("applicaitonContext属性为null,请检查是否注入了SpringContextHolder!");
}
}
}
定时任务处定义Mapper的代码:
private ScadeOracleMapper app = SpringContextHolder.getBean(ScadeOracleMapper.class);
private CollectionMapper apps= SpringContextHolder.getBean(CollectionMapper.class);
private BackupsMapper bs= SpringContextHolder.getBean(BackupsMapper.class);
如此修改之后就能调用 三个mapper中的方法了。