首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我可以在Quartz任务中创建Spring上下文吗?或者这是一个糟糕的想法?

在Quartz任务中创建Spring上下文是可能的,但这通常被认为是一个糟糕的想法。Quartz是一个用于调度任务的开源框架,而Spring是一个用于构建企业级应用程序的框架。两者的设计目标和使用方式有所不同。

在Quartz任务中创建Spring上下文可能会导致以下问题:

  1. 性能问题:每次任务执行时都会创建一个新的Spring上下文,这会消耗大量的资源和时间。如果任务频繁执行,系统的性能可能会受到影响。
  2. 内存泄漏:由于每个任务都会创建一个新的Spring上下文,如果没有正确地销毁上下文,可能会导致内存泄漏问题。
  3. 依赖注入问题:Quartz任务中的Spring上下文可能无法正确地注入依赖项,因为任务的执行环境与应用程序的其他部分可能存在差异。

相反,更好的做法是将Quartz任务与现有的Spring应用程序集成。这样可以确保任务在已经初始化的Spring上下文中运行,可以共享应用程序的资源和依赖项。可以通过配置Quartz的JobFactory来实现这一点,以便在任务执行时使用已经存在的Spring上下文。

总结起来,虽然在Quartz任务中创建Spring上下文是可能的,但这通常被认为是一个糟糕的想法,因为它可能导致性能问题、内存泄漏和依赖注入问题。更好的做法是将Quartz任务与现有的Spring应用程序集成,以确保任务在已经初始化的Spring上下文中运行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Quartz任务调用Spring容器bean及动态调度任务-SchedulerFactoryBean「建议收藏」

大家好,又见面了,是你们朋友全栈君。 Quartz 是开源任务调度框架翘首,它提供了强大任务调度机制,同时保持了使用简单性。...Spring创建QuartzScheduler、Trigger和JobDetail提供了便利FactoryBean类,以便能够Spring 容器享受注入好处。...此外Spring还提供了一些便利工具类直接将SpringBean包装成合法任务Spring进一步降低了使用Quartz难度,能以更具Spring风格方式使用Quartz。...回忆一个Spring集成JPA、Hibernate框架,就知道这是Spring集成第三方框架经常采用招数之一。...SchedulerFactoryBean通过以下属性代替框架自身配置文件: ●dataSource:当需要使用数据库来持久化任务调度数据时,你可以Quartz配置数据源,也可以直接在Spring

1K20

spring-boot-2.0.3之quartz集成,数据源问题,源码探究

前言   开心一刻       着火了,他报警说:119,我家发生火灾了。     119问:在哪里?     他说:我家。     119问:具体点。     他说:我家厨房里。     ...与quartz集成,非常简单,pow.xml引入spring-boot-starter-quartz依赖即可,工程中就可以通过 @Override private Scheduler scheduler...ok,问题又来了,spring管理MyJob实例能用到quartz,不能! quartz如何获取MyJob实例?...说了这么多,方案总结下:       1、如何利用quartz数据源(或者数据库连接)进行数据库操作       2、引申下,能不能将quart数据源设置成我们应用数据源,让quartz与应用共用一个数据源...或者springNonTxDataSource.quartzScheduler,一个支持事务,一个不支持事务;至于怎样自定义dsName,还没去尝试,有兴趣小伙伴可以自己试试;   4、springboot

1.8K30

quartz定时任务使用_netty定时调度

(2)JobDetail: Quartz每次执行实例时候都重新创建一个job实例,所以它不直接接受一个job实例, 而是通过接受一个job实现类,以便运行时通过new Instance()反射机制实例化...group, java.lang.Class jobClass), 该构造函数要求指定Job实现类,以及任务Scheduler组名和Job名称; (3)JobBuilder: 用来定义或者创建...(6)TriggerBuilder: 使用builder模式,用来定义或者创建触发器实例 (7)ThreadPool: Timer有且只有一个后台线程执行,Quartzschedule下有ThreadPool...,Trigger和JobDetail可以注册到Scheduler, 两者Scheduler拥有各自组及名称,组及名称是Scheduler查找定位容器某一对象依据, Trigger组及名称必须唯一...候,或者执行任务时候,或终止时候进行监听,监听时候加入一些 自定义某些逻辑,比如打印日志信息。

76510

任务调度框架Quartz(一) Quartz——一个强大定时任务调度框架

Quartz一个任务调度框架(库),它几乎可以集成到任何应用系统。术语”job schedule”似乎为不同的人提供了不同想法。...Quartz不是一个任务队列——虽然它确实可以一些小规模应用合理作为一个任务队列来使用。...Quartz任务可以在你应用启动和执行,可以作为一个独立应用程序(通过RMI接口),也可是一个J2EE应用执行。...或者说怎么创建工作流? 目前还没有直接或自由方式通过Quartz链式触发任务。然而,有几种方法,你可以轻易达到目标。...确保你有一个托管和非托管数据源供Quartz使用。 确保你一个任务处理业务是一个事务。 处理完记得提交事务。

1.1K20

SpringBoot集成Quartz实现定时任务

1 需求 前后端分离实验室管理项目中,有一个功能是学生状态统计。设计是按天统计每种状态比例。为了便于计算,每天0点,系统需要将学生状态重置,并插入一条数据作为一天开始状态。...Scheduler还拥有一个SchedulerContext,顾名思义就是上下文,通过SchedulerContext我们可以获取到触发器和任务一些信息。...建表sql语句Quartzgithub可以找到,里面有针对每一种常用数据库sql语句,具体地址是: Quartz数据库建表sql 。 ?...第1节中提到一个子需求是每天0点执行,是一个周期性任务任务内容也是确定,所以直接在代码里注册JobDetail和Triggerbean就可以了。...查阅网上博客之后,发现大部分博客里介绍Quartz使用还是停留在Spring阶段,配置也都是通过xml,因此实现了功能以后,将整个过程总结了一下,留给需要的人以及以后自己做参考。

1.4K40

如何学会阅读源码,推荐收藏!

问源码面试一般就是回去等消息,然后就没然后了。 那时候开始意识到,源码这东西之前工作感受不到,但是面试好像面的还挺频繁,从此有意识开始了jdk部分源码阅读(主要是集合)。...读spring源码起于工作遇到了一个问题(spring jdbcTemplate事务,各种诡异,包你醍醐灌顶!)...SchedulerFactoryBean,负责创建和配置quartz Scheduler,并将其注册到spring容器。...quartz如何操作数据库 我们通过停止定时任务来跟下quartz对数据库操作 发现quartz用如下方式获取connection conn = DBConnectionManager.getInstance...总结与感悟 从上至下全部通读方式,个人不太推荐,这是建立很熟悉基础上,当我们对某个框架已经比较熟悉了,再从上至下进行通读,彻底了解,这是认为正确方式;但是从不熟悉到熟悉这个过程,个人不推荐全部通读

8403129

未曾深入源码,算不得一枚码农

问源码面试一般就是回去等消息,然后就没然后了。 那时候开始意识到,源码这东西之前工作感受不到,但是面试好像面的还挺频繁,从此有意识开始了jdk部分源码阅读(主要是集合)。...读spring源码起于工作遇到了一个问题(spring jdbcTemplate事务,各种诡异,包你醍醐灌顶!)...SchedulerFactoryBean,负责创建和配置quartz Scheduler,并将其注册到spring容器。...quartz如何操作数据库 我们通过停止定时任务来跟下quartz对数据库操作 发现quartz用如下方式获取connection conn = DBConnectionManager.getInstance...4.总结与感悟 从上至下全部通读方式,个人不太推荐,这是建立很熟悉基础上,当我们对某个框架已经比较熟悉了,再从上至下进行通读,彻底了解,这是认为正确方式;但是从不熟悉到熟悉这个过程,个人不推荐全部通读

42330

分布式调度框架Quartz衍生出三种任务类型,你用过几个?

前言 Quartz内部没有明确任务类型概念,ApiBoot对其进行封装后才确切定义了这个概念,可以根据业务场景按需选择适合任务类型来构建执行任务。...来完成,同一个任务可以使用不同类型执行。...会自动扫描到DemoJob并通过反射创建实例后放入Ioc容器,具体流程可以访问 这种方式整合Quartz你见过?...().jobClass(DemoJob.class).wrapper()); 我们只需要一行代码就可以来定义一个任务代码中出现了一个新面孔 ApiBootOnceJobWrapper。...类型任务开发也是比较常用,根据指定循环次数以及每一次执行间隔时间运行定时任务逻辑,当获取到期望结果后还可以任务自身进行删除,先来看看一个简单例子: /** * ApiBoot Quartz

38720

微服务架构之Spring Boot(六十一)

=jdbc 使用JDBC存储时,可以启动时初始化架构,如以下示例所示: spring.quartz.jdbc.initialize-schema=always 默认情况下,使用Quartz库提供标准脚本检测并初始化数据库...在上下文中没有 TaskExecutor bean情况下,Spring Boot使用合理默认值自动配置 ThreadPoolTaskExecutor ,这些默认值可以自动与 异步任务执行相关联(...如果需要创建自定义执行程序或调度程序,则在上下文可以使用 TaskExecutorBuilder bean和 TaskSchedulerBuilder bean。 42....如果 spring-integration-jdbc 可用,则可以启动时创建默认数据库模式,如以下行所示: spring.integration.jdbc.initialize-schema=always...默认情况下,Spring Boot会创建一个ID为 mbeanServer MBeanServer bean,并公开使用Spring JMX注释( @ManagedResource 注释任何beans

80020

是怎么读源码,授之以渔

项目中引用不还是没改jar包。回想起来觉得那时候想法确实挺......   ...问源码面试一般就是回去等消息,然后就没然后了。那时候开始意识到,源码这东西之前工作感受不到,但是面试好像面的还挺频繁,从此有意识开始了jdk部分源码阅读(主要是集合)。...读spring源码起于工作遇到了一个问题(spring jdbcTemplate事务,各种诡异,包你醍醐灌顶!)...SchedulerFactoryBean,负责创建和配置quartz Scheduler,并将其注册到spring容器。...总结与感悟   从上至下全部通读方式,个人不太推荐,这是建立很熟悉基础上,当我们对某个框架已经比较熟悉了,再从上至下进行通读,彻底了解,这是认为正确方式;但是从不熟悉到熟悉这个过程,个人不推荐全部通读

63520

SpringBoot 整合 Quartz 实现 JAVA 定时任务动态配置

没接触过定时任务同学可以先看下此篇:JAVA定时任务实现几种方式 定时任务实现方式千人千种,不过基础无外乎 1、JDK Timer类 2、Quartz 3、SpringTask 。...Quartz配置 Springboot配置方法,常规Spring项目可以xml配置 @Configuration public class QuartzConfigration { @Autowired...多个CommandLineRunner可以被同时执行在同一个spring上下文中并且执行顺序是以order注解参数顺序一致。 ❞ 第二步:读取数据库,加载scheduler调度器。 job方法。...//为什么需要这个类呢,这个demo,大家可以将此类删掉,发现程序也可以正确运行,可是为什么还是加上呢。...//大家可以看下我们任务类,大家可以看到Job对象实例化过程是Quartz中进行,这时候我们将spring东西注入进来,肯定是行不通,所以需要这个类 @Autowired private

1.9K20

Spring Boot 整合 Quartz 实现 Java 定时任务动态配置

最近重新研究了下Quartz配置,实现了不停机添加、暂停、删除、立即触发任务方法,本篇分享出来,其实也不算是完全研究,在上家公司已经有大佬实现了,这次是也是基于大佬理解重新实现下。...,但却还是一头雾水,且听我慢慢道来~~ 代码逻辑 第一步:启动项目,加载监听 Quartz配置 Springboot配置方法,常规Spring项目可以xml配置 @Configuration public...接口被用作将其加入spring容器时执行其run方法。多个CommandLineRunner可以被同时执行在同一个spring上下文中并且执行顺序是以order注解参数顺序一致。...//为什么需要这个类呢,这个demo,大家可以将此类删掉,发现程序也可以正确运行,可是为什么还是加上呢。...//大家可以看下我们任务类,大家可以看到Job对象实例化过程是Quartz中进行,这时候我们将spring东西注入进来,肯定是行不通,所以需要这个类 @Autowired private

84740

java定时任务实现几种方式注解(JAVA定时任务)

这里把定时任务实现收集整理了一些方法,希望可以帮到刚开始做定时任务同学,写得不对地方请指正。...: SpringScheduledTimerTask定义了一个定时器任务运行周期,遗憾是,你可以指定任务执行频度,但你无法精确指定它何时运行,这就需要用到第二种Quartz进行任务调度;...创建一个业务任务Spring配置文件声明 ; Spring 配置文件,配置ScheduledTimerTask ,并且关联上自定义任务实例; 启动定时器...,SpringTimerFactoryBean负责启动定时任务 2.2 使用 Quartz: 首先还是老样子定义业务逻辑任务Spring声明并且配置作业调度触发方式...,代码如上; 启动你应用即可 2.3 使用 Spring-Task Spring自带定时任务工具,spring task,可以将它比作一个轻量级Quartz,而且使用起来很简单,除spring

2.3K10

第三十九章:基于SpringBoot & Quartz完成定时任务分布式单节点持久化

一些项目中定时任务可能是必不可少,由于某种特殊原因定时任务可能丢失,如重启定时任务服务项目后,原内存定时任务就会被完全释放!那对于我们来说可能是致命问题。...QuartzConfiguration quartzSpring相关框架整合方式有很多种,我们今天采用jobDetail使用Spring Ioc托管方式来完成整合,我们可以定时任务实例中使用Spring...方法内,我们采用AutowireCapableBeanFactory来托管SpringBeanJobFactory类createJobInstance方法返回定时任务实例,这样我们就可以定时任务类内使用...第二种:采用与创建项目统一个数据源,定时任务持久化相关表与业务逻辑一个数据库内。...任务触发器创建时cron表达式可以搭配startAt方法来同时使用。

2.2K100

spring-boot-2.0.3之quartz集成,最佳实践

,此时就有了一个疑问:quartz job真的不能注入到spring、不能享受spring自动注入?...这个问题应该换个方式来问:job有必要注入到spring容器? 很显然没必要。 job能不能注入spring常规bean了? 答案是可以。...,完整代码请看:spring-boot-quartz-plus   job实例化过程源码解析     还记得SchedulerFactoryBean创建可以看看这里,我们从SchedulerFactoryBean...总结   1、quartz job无需注入到spring容器(注入进去了也没用),但quartz job可以注入spring容器常规bean,当然还可以注入jab data map属性值...;   2、 springboot覆写了quartzjobFactory,使得quartz调用jobFactory创建job实例时候,能够将spring容器bean注入到job,AutowireCapableBeanJobFactory

2.9K20

Spring+Quartz实现定时任务 (二)

首先创建一个web项目并引入Springquartz依赖 然后web.xml文件引入Spring支持 <?xml version="1.0" encoding="UTF-8"?...不过根据配置也很方便实现类似SimpleTriggerFactoryBean形式定时任务Spring所提供这两种触发器方式和前面提到任务创建方式均可以相互之间混用,很灵活。...很不幸是运行失败了,这是为啥呢?别着急,慢慢看看异常信息(学会分析异常信息也是程序员重要能力之一噢)。从异常信息我们可以看出,JobDetailBean引用了一个接口来作为父类了。...既然是这样的话,那我们就需要看一下JobDetailBean源码了。 QuartzJobDetail竟然是一个接口。是不是搞错了,你肯定要问了。这是为什么呢,为什么呢,为什么呢?...处理它很简单啊:一、把Quartz降到1.X版本;二、更改 Job实现方式。 首先我们来试试使用1.X版本Quartz 可以看到Quartz1.X版本,JobDetail还是一个类。

92260

SpringBoot 整合 Quartz 实现 JAVA 定时任务动态配置

没接触过定时任务同学可以先看下此篇:JAVA定时任务实现几种方式 定时任务实现方式千人千种,不过基础无外乎 1、JDK Timer类 2、Quartz 3、SpringTask 。...Quartz配置 Springboot配置方法,常规Spring项目可以xml配置 @Configuration public class QuartzConfigration { @Autowired...多个CommandLineRunner可以被同时执行在同一个spring上下文中并且执行顺序是以order注解参数顺序一致。 ❞ 第二步:读取数据库,加载scheduler调度器。 job方法。...//为什么需要这个类呢,这个demo,大家可以将此类删掉,发现程序也可以正确运行,可是为什么还是加上呢。...//大家可以看下我们任务类,大家可以看到Job对象实例化过程是Quartz中进行,这时候我们将spring东西注入进来,肯定是行不通,所以需要这个类 @Autowired private

72830

生成订单30分钟未支付,则自动取消,该怎么实现?

作者 | 菜鸟要飞 来源 | https://mp.weixin.qq.com/s/WXDJX2ECheZ8cm6YgYxElQ 引言 开发,往往会遇到一些关于延时任务需求。...(2)JDK延迟队列 思路 该方案是利用JDK自带DelayQueue来实现,这是一个无界阻塞队列,该队列只有延迟期满时候才能从中获取元素,放入DelayQueue对象,是必须实现Delayed...如果当前指针指在1上面,一个任务需要4秒以后执行,那么这个执行线程回调或者消息将会被放在5上。那如果需要在20秒之后执行怎么办,由于这个环形结构槽数只到8,如果要20秒,指针需要多转2圈。...当然,如果你对可靠性要求不高,可以使用。 优缺点 优点: (1)由于使用Redis作为消息通道,消息都存储Redis。如果发送程序或者任务处理程序挂了,重启之后,还有重新处理数据可能性。...而隔壁房贷还在涨,怎么就越反越糟糕了呢? 假如 IDEA 也加入防沉迷功能... 说说延时队列实现几种姿势 喜欢本文欢迎转发,关注订阅更多精彩 关注回复「加群」,加入Spring技术交流群

59320
领券