SpringBoot项目使用多线程处理定时任务时无法通过@Autowired注入bean
2019-02-15 11:09
711 查看
需求是做定时任务推送消息或者修改状态,springBoot中在多线程中为了线程安全,一般都是防止注解注入的,新线程中@Autowired注解无法注入需要的bean(即:保存历史数据的service层),程序一直在报 NullPointerException ,所以需要调用spring中的ApplicationContext来获取封装的bean。
解决可以写一个工具类来获取spring中的bean
package com.ksky.common.config; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * @ProjectName: * @Package: com.ksky.common.config * @ClassName: ApplicationContextProvider * @Description: 获取bean对象的工具类 * @Author: YangYeZhu * @CreateDate: 2019/2/15 * @Version: 1.0 */ /** * Author:YangYeZhu * Date:2019/2/15 */ @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); } }
获取bean的工具类写好后,在方法中需要使用注入对象时,可以先获取通过工具类获取对象,在进行接口调用。
this.projectManageService = ApplicationContextProvider.getBean(ProjectManageService.class); List<Project> list = projectManageService.list(false);
好了,问题就得到解决了,文章中如错误或不足,请指出,不胜感激,本人小白一枚,如有不足,请多多包含,也请各位大神能不吝赐教,抱拳
相关文章推荐
- 解决SpringBoot项目使用多线程处理任务时无法通过@Autowired注入bean问题
- SpringBoot项目使用多线程处理任务时无法通过@Autowired注入bean
- [Spring Boot实战系列] - No.4 Spring boot 中如何在Utils类中使用@Autowired注入bean
- Spring使用Quartz定时调度Job无法Autowired注入Service的解决方案
- Spring使用Quartz定时调度Job无法Autowired注入Service的解决方案
- 【SpringBoot】拦截器使用@Autowired注入接口为null解决方法
- 解决Spring boot使用Quartz时Job中无法注入Bean 空指针异常问题
- Spring-Boot中如何使用多线程处理任务
- 二、springboot项目的简单使用之:定时任务
- spring+quartz实现定时任务遇到问题总结(bean无法注入)
- spring boot 中@Autowired注解无法自动注入的错误
- 解决Springboot @Autowired 无法注入问题
- spring 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入
- 详解Spring-Boot中如何使用多线程处理任务
- Spring+Quartz 定时任务无法自动注入bean的问题
- 在搭建spring boot环境时,碰到总是不能Autowired,总是提示需要注入bean文件
- 【SpringBoot】拦截器使用@Autowired注入接口为null解决方法
- Action中如何通过@Autowired自动注入spring bean ?
- Springboot中使用aop导致@Autowired全部注入失败
- Spring-Boot中如何使用多线程处理任务方法