SpringBoot使用quartz,注入feignClient,client为null问题
更新时间:2024年11月12日 08:51:56 作者:So Young_
在SpringBoot中使用Quartz和FeignClient时,如果通过@Autowired或构造方法注入FeignClient导致为null,可以使用Spring提供的通过文件名获取bean的方式解决,这种方法在Quartz启动时通过反射注入类,而类还未初始化好,导致FeignClient为null的问题
SpringBoot使用quartz,注入feignClient,client为null
使用@autowired,活着构造方法注入,打断点查看注入的feigncliet为null, 搜索网上的一些博客,大致原因是因为quartz启动是通过反射将一些类注入进来,启动的时候引用这个类还没初始化好,下面是解决方案:
使用spring提供的通过文件名获取bean的方式
注入进来
@Component public class SpringUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(@NotNull ApplicationContext applicationContext) throws BeansException { if (SpringUtil.applicationContext == null) { SpringUtil.applicationContext = applicationContext; } } // 通过name获取 Bean. @NotNull public static Object getBean(String name) { return applicationContext.getBean(name); } // 通过class获取Bean. @NotNull public static <T> T getBean(Class<T> clazz) { return applicationContext.getBean(clazz); } // 通过name,以及Clazz返回指定的Bean @NotNull public static <T> T getBean(String name, Class<T> clazz) { return applicationContext.getBean(name, clazz); } }
使用的时候通过类名加载类
正常使用即可
CommunicationClient communicationClient = SpringUtil.getBean(CommunicationClient.class); // 正常调用方法 communicationClient.getFunction();
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Java中的ArrayList.trimToSize()方法详解
这篇文章主要介绍了Java中的ArrayList.trimToSize()方法详解,前几天看了Java ArrayList,没有明白trimToSize()这个方法是什么意思,所以看了一下源码并且debug一下自己的一个例子,明白了其中的含义,需要的朋友可以参考下2023-11-11基于springboot的flowable工作流实战流程分析
这篇文章主要介绍了基于springboot的flowable工作流实战流程分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-10-10
最新评论