Quartz自定义的Job使用@Autowire提示空指针问题

这篇具有很好参考价值的文章主要介绍了Quartz自定义的Job使用@Autowire提示空指针问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 问题描述
在我们的自定义的Job类中,想用@Autowire注入属性,但该属性为空

public class MyJob implements Job {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // Job中需要执行的方法
        System.out.println("这里是我们自定义的定时任务中,需要执行的任务"+rabbitTemplate);
    }
}

执行自定义的任务时,运行到这里就会包空指针异常的错误。

二. 问题讲解
1.这是因为**@Autowire时把属性注入到了Spring注入的job类实例中了**。
3.而我们的job类中方法执行时候,quartz会重新实例化一个jobClass,这个实例和Spring注入的实例是不同的,所以没有属性,属性就是空的。
3.因此执行到这里的时候就会报错。


三. 解决方法
1.我们可以利用ApplicationContextAware接口获取到容器,然后再从容器中取出我们需要的bean对象。

2.做法是新建一个实现了ApplicationContextAware的类,该类用来从容器中取bean。

@Component
public class ApplicationContextUtils implements ApplicationContextAware {
    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

    // 根据name获取相应的bean
    public static Object getBean(String name){
        return applicationContext.getBean(name);
    }
}


3.然后再需要的地方,通过这种方式来取值,这样就不会出现空指针的错误了。

public class MyJob implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // Job中需要执行的方法
        System.out.println("这里是我们自定义的定时任务中,需要执行的任务"+ ApplicationContextUtils.getBean("rabbitTemplate"));
    }
}文章来源地址https://www.toymoban.com/news/detail-636182.html

到了这里,关于Quartz自定义的Job使用@Autowire提示空指针问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IDEA提示找不到Mapper接口:Could not autowire.No beans of ‘xxxMapper‘ type found

    我们可以看到,上面的红色警告在提示我们,找不到 xxxMaper 这个类型的 bean。 为啥呢? 因为 @Mapper 这个注解是 Mybatis 提供的,而 @Autowried 注解是 Spring 提供的,IDEA能理解 Spring 的上下文,但是却和 Mybatis 关联不上。而且我们可以根据 @Autowried 源码看到,默认情况下,@Autowri

    2024年02月08日
    浏览(41)
  • fastjson解析自定义get方法导致空指针问题

    为了在日志中把出入参打印出来,以便验证链路和排查问题,在日志中将入参用fastjson格式化成字符串输出,结果遇到了NPE。 示例代码 错误提示 发现是OrganizationId对象里的方法报空指针了,赶紧看一眼这个类: 怎么会运行到 getIdToLong 方法呢? 对 JSONObject.toJSONString 方法进行

    2024年02月22日
    浏览(29)
  • 使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题分析

    1.可能是编译的时候后缀带了.class:把后缀去掉; 2.可能是因为你的java文件带了package包,原因是:我们在包里运行文件,在运行文件的时候又找了一次包,可是我们已经在包里了,自然找不到主类了。 针对第二种错误解决方法有两种: 方法一:把java文件中的包删掉或者注释

    2024年02月15日
    浏览(54)
  • 函数指针定义与使用

    1、函数指针 函数指针是指向函数的指针变量。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时, 每一个函数都有一个入口地址,该入口地址就是函数指

    2024年02月16日
    浏览(34)
  • springboot+redis+mysql+quartz-通过Java操作jedis使用pipeline获取缓存数据定时更新数据库

    代码讲解:6-点赞功能-定时持久化到数据库-pipeline+lua-优化pipeline_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1yP411C7dr 代码: blogLike_schedule/like06 · xin麒/XinQiUtilsOrDemo - 码云 - 开源中国 (gitee.com) https://gitee.com/flowers-bloom-is-the-sea/XinQiUtilsOrDemo/tree/master/blogLike_schedule/like06 数据库表的

    2024年02月16日
    浏览(43)
  • springboot+redis+mysql+quartz-通过Java操作jedis定时使用lua脚本获取缓存数据并更新数据库

    springboot+redis+mysql+quartz-通过Java操作jedis定时使用lua脚本获取缓存数据并更新数据库 代码讲解:7.1点赞功能-定时持久化到数据库-Java整合lua_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1ZX4y1H7JT/ 代码: blogLike_schedule/like07 · xin麒/XinQiUtilsOrDemo - 码云 - 开源中国 (gitee.com) https://gitee

    2024年02月13日
    浏览(51)
  • 【Golang】解决Go test执行单个测试文件提示未定义问题

    目录 背景 根本原因 解决方法 解决 多级引用或多个引用包的情况 总结  资料获取方法 很多人记录过怎么执行Go test单个文件或者单个函数,但是要么对执行单文件用例存在函数或变量引用的场景避而不谈,要么提示调用了其它文件中的模块会报错。其实了解了go test命令的机

    2024年02月14日
    浏览(38)
  • 结构体的使用和结构体指针的定义注意事项

    1、使用背景      由于想把不同地方的三个变量数据存放在一个结构体中,并且调用W25QXX_Write((u8*)p,FLASH_SIZE-100,SIZE); //从倒数第100个地址处开始,写入SIZE长度的数据。调用flash写数据函数,其参数为指针地址,于是需要定义一个结构体和指向结构体的指针,这样调用flash写函数

    2024年01月20日
    浏览(52)
  • C++引用的相关定义以及使用场景与指针之前的区别

    🌏博客主页: 主页 🔖系列专栏: C++ ❤️感谢大家点赞👍收藏⭐评论✍️ 😍期待与大家一起进步! 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。 引用的特性: 引用在定义时必

    2024年02月03日
    浏览(37)
  • 使用java实现 分布式任务调度平台XXL-JOB 部署及使用

    XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 详细的特性和优点参考官网地址:https://www.xuxueli.com/xxl-job/ 一、任务调度 0.下载官方源码 1.解压后可以在 xxl-job-2.3.1docdb 找

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包