原创地址:https://www.cnblogs.com/xiaolong1996/p/9571645.html
使用Hutool 工具类中的全局定时任务-CronUtil
使用了spring的 @Autowired 注解注入需要的service,可在调用service中的add方法时,程序报空指针异常,在线程中为了线程安全,是防注入的,通过上下文对象实例解决
package com.backstage.config;
import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component;
/** * @ProjectName: * @Package: com.backstage.config * @ClassName: ApplicationContextProvider * @Description: 获取bean对象的工具类 * @Author: wangzhilong * @CreateDate: 2018/8/31 13:26 * @Version: 1.0 */
/** * Author:ZhuShangJin * Date:2018/7/3 */ @Component public class ApplicationContextProvider implements ApplicationContextAware { /** * 上下文对象实例 */ private static ApplicationContext applicationContext;
@Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; }
/** * 获取applicationContext * * @return */ public static ApplicationContext getApplicationContext() { return applicationContext; }
/** * 通过name获取 Bean. * * @param name * @return */ public static Object getBean(String name) { return getApplicationContext().getBean(name); }
/** * 通过class获取Bean. * * @param clazz * @param <T> * @return */ public static <T> T getBean(Class<T> clazz) { return getApplicationContext().getBean(clazz); }
/** * 通过name,以及Clazz返回指定的Bean * * @param name * @param clazz * @param <T> * @return */ public static <T> T getBean(String name, Class<T> clazz) { return getApplicationContext().getBean(name, clazz); }
public TimingMonitoring() { //new的时候注入需要的bean this.detailedDataService = ApplicationContextProvider.getBean(DetailedDataService.class); }
}