最近一直被各种问题打断,没有静下心来去对现有问题进行深思。老样子,还是拿一个具体的问题开刀。
【问题描述】
通过springboot 创建定时任务, 创建完定时任务后,需要对定时任务进行删除,但是任务始终删除不了
删除代码如下:
@Override public void deleteTrigger(String triggerName, String jobName, String group) { try { logger.debug("delete trigger {" + triggerName + "@" + group + "}"); //pause trigger scheduler.pauseTrigger(TriggerKey.triggerKey(triggerName, group)); //delete job scheduler.deleteJob(JobKey.jobKey(jobName, group)); scheduler.unscheduleJob(TriggerKey.triggerKey(triggerName, group)); logger.debug("trigger {" + triggerName + "@" + group + "} resumed"); } catch (SchedulerException e) { logger.warn("delete trigger error", e); throw new RuntimeException(e); } }
开始的时候,总是在想为什么删不了,查看源码,实现如下:
StdJDBCDelegate 代理类实现:
/** * <p> * Delete the base trigger data for a trigger. * </p> * * @param conn * the DB Connection * @return the number of rows deleted */ public int deleteTrigger(Connection conn, TriggerKey triggerKey) throws SQLException { PreparedStatement ps = null; deleteTriggerExtension(conn, triggerKey); try { ps = conn.prepareStatement(rtp(DELETE_TRIGGER)); ps.setString(1, triggerKey.getName()); ps.setString(2, triggerKey.getGroup()); return ps.executeUpdate(); } finally { closeStatement(ps); } }
实现Sql:
String DELETE_TRIGGER = "DELETE FROM " + TABLE_PREFIX_SUBST + TABLE_TRIGGERS + " WHERE " + COL_SCHEDULER_NAME + " = " + SCHED_NAME_SUBST + " AND " + COL_TRIGGER_NAME + " = ? AND " + COL_TRIGGER_GROUP + " = ?";
但是打断点,却没有执行
然后查看当时SchedulerFactoryBean 这个对象的值 是自己new的,并没有从容器中获取,导致创建的scheduler对象是null,后来改成bean 注入方式
@Bean(name = "schedulerFactoryBean") public SchedulerFactoryBean schedulerFactory(DruidDataSource dataSource) { SchedulerFactoryBean factory = new SchedulerFactoryBean(); //TODO 程序启动后,延迟20s执行 factory.setStartupDelay(20); factory.setDataSource(dataSource); factory.setQuartzProperties(quartzConfigurationProperties); factory.setTriggers(cronTriggerFactoryBean().getObject()); return factory; } @Bean(name = "scheduler") @ConditionalOnBean(SchedulerFactoryBean.class) public Scheduler schedulerBean(SchedulerFactoryBean schedulerFactoryBean) { schedulerFactoryBean.setTriggers(cronTriggerFactoryBean().getObject()); Scheduler scheduler = schedulerFactoryBean.getScheduler(); return scheduler; }
当时写的时候,intellj 这块一直提示 “could not autowire” ,后来尝试启动,正常,想起来,intellj 太过智能,导致一些误报,关掉
关掉 一切正常
【结束语】
至此,该问题就解决了,使用springboot 还需要深入
相关推荐
将两者结合,我们可以轻松地在SpringBoot应用中创建、管理和执行定时任务。 1. **Quartz简介** Quartz是一个功能强大且灵活的作业调度库,它允许开发者定义定时任务并安排它们在未来的某个时间点执行。Quartz支持...
SpringBoot和Quartz的结合是Java开发者在构建可扩展、高效任务调度系统时常见的选择。SpringBoot以其便捷的启动和管理特性,简化了Java应用程序的开发,而Quartz则是一款强大的开源作业调度框架,能够方便地创建和...
2. **配置Quartz**:在SpringBoot的配置文件`application.properties`或`application.yml`中,我们可以设置Quartz的一些基本属性,如数据库连接、job存储方式(内存或数据库)、线程池大小等。 3. **创建Job类**:...
7. 监控任务状态:SpringBoot可以通过Actuator模块提供的健康检查端点,结合Quartz提供的信息,展示当前运行的任务状态。此外,还可以自定义监控界面,利用Quartz的MBean特性,展示更丰富的任务信息。 8. 使用Admin...
在IT行业中,Spring Boot、Quartz和MySQL是三个非常重要的技术组件,它们分别代表了微服务开发框架、任务调度框架和关系型数据库管理系统。这里我们将深入探讨如何将它们结合使用,构建一个基于Spring Boot的动态...
SpringBoot结合Quartz框架,可以实现灵活且高效的定时任务管理。本教程将深入探讨如何在SpringBoot项目中实现Quartz的动态化配置,允许在页面上进行查看、添加、修改、删除以及暂停等操作。 一、SpringBoot与Quartz...
项目中的"springboot-quartz-demo-feature_es"很可能包含了项目的源代码、配置文件和其他资源。启动该项目,开发者可以通过解压文件,然后使用Spring Boot的内置服务器来运行。日志(logger)功能可以帮助追踪应用...
总的来说,这个项目结合了SpringBoot2的快速开发特性,Quartz的定时任务调度能力,以及HTTPClient和未来可能的RPC接口实现的远程服务调用,再配合Logback的日志记录,构建了一个强大且灵活的后台任务管理系统。...
Springboot与Quartz结合是企业级应用中常见的一种任务调度解决方案。Springboot以其简洁的配置和强大的集成能力,使得在项目开发中引入Quartz变得更加...这个例子对于理解和实践Springboot结合Quartz的开发非常有帮助。
SpringBoot以其便捷的启动和管理特性,使得快速开发变得更加简单,而Quartz则是一个强大的作业调度框架,可以实现复杂的时间触发规则和任务执行策略。接下来,我们将深入探讨如何在SpringBoot中集成Quartz,以及如何...
在Java开发领域,Spring Boot和Quartz是两个非常重要的组件。Spring Boot简化了Spring应用程序的配置和启动过程,而Quartz则是一个强大的作业调度框架,用于执行定时任务。本篇文章将详细探讨如何在Spring Boot 2.0...
首先,SpringBoot是基于Spring框架的轻量级启动器,它简化了新Spring应用的初始搭建以及开发过程。在本项目中,SpringBoot作为基础框架,提供了一个简洁、自动配置的环境,使得开发者可以快速搭建和运行应用。 ...
SpringBoot与Quartz结合使用,可以构建强大的定时任务执行系统,尤其在企业级应用中,对于数据处理、定期报告、清理任务等需求有着广泛的应用。本文将深入探讨SpringBoot集成Quartz的相关知识点,并结合前端技术如...
SpringBoot结合Spring Data JPA或MyBatis等持久层框架,能方便地处理这些操作。你需要编写Repository接口,定义CRUD方法,并在Job类中注入Repository实例,调用其方法完成数据处理。 4. **任务调度** 创建完Job和...
将Quartz与SpringBoot结合,我们可以利用Spring的依赖注入和自动化配置能力,让任务调度变得更加便捷。 首先,让我们了解一下SpringBoot如何集成Quartz。在SpringBoot项目中引入Quartz的依赖,可以在`pom.xml`或`...
通过这个组合,SpringBoot结合Quartz可以轻松地创建和管理定时任务,满足各种复杂的定时需求。这包括但不限于数据同步、报表生成、清理过期数据等场景。在实际应用中,我们还可以进一步探索如任务分组、并发控制、...
结合Quartz,我们可以监控任务状态,查看任务执行日志,帮助调试和优化。 5. **错误处理**:当任务执行过程中出现异常,Spring Boot的异常处理机制可以帮助捕获并记录错误,保证系统的稳定运行。 压缩包中的文件...
Quartz是Java平台上的一个开源作业调度框架,它允许开发者安排任务执行,而Spring Boot则是一个简化Spring应用开发的框架。这个压缩包很可能是为了展示如何在Spring Boot应用中配置和使用Quartz来实现定时任务。 ...
SpringBoot和Quartz是Java开发中的两个重要工具。SpringBoot简化了Spring框架的配置和启动过程,使得开发者能够快速地创建独立的、生产级别的基于Spring的应用。而Quartz则是一个强大的、开放源代码的作业调度框架,...
SpringBoot是Java开发中的一个流行框架,它简化了Spring应用的初始搭建以及开发过程。而Quartz是一个开源的作业调度框架,广泛用于处理定时任务。本文将深入探讨如何在SpringBoot 2.0.1版本中整合Quartz,实现动态...