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();
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
RestTemplate实现多种底层HTTP客户端类库的切换用法
这篇文章主要为大家详细的讲解了RestTemplate实现多种底层HTTP客户端类库的切换示例,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步2022-03-03
spring boot 1.5.4 web容器定制(端口号等修改)方法
下面小编就为大家带来一篇spring boot 1.5.4 web容器定制(端口号等修改)方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-06-06


最新评论