quartz动态更新运行时间


@Resource
private Scheduler startQuertz;//这个需要注入过来

/**
* 更新定时任务的运行时间
* @param triggerKey 定时任务在spring里配置bean的id
* @param cronExpression 定时器的cron表达式
* @param executeNow 默认值为0,不要立即执行定时任务一次; 非0值表示立即执行一次
* @return
*/
public boolean updateCronExpression(String triggerKey, String cronExpression, Integer executeNow) {
if(StringUtils.isBlank(triggerKey) || StringUtils.isBlank(cronExpression)) {
log.error("参数错误");
return false;
}
if(executeNow == null) {
executeNow = 0;
}
triggerKey = triggerKey.trim();
cronExpression = cronExpression.trim();

TriggerKey key = new TriggerKey(triggerKey);//动态条件

try {
Trigger oldTrigger = startQuertz.getTrigger(key);

if(oldTrigger instanceof CronTriggerImpl) {
CronTriggerImpl trigger = (CronTriggerImpl)oldTrigger;
trigger.setCronExpression(cronExpression);//动态传入的条件
//不立即执行
if(executeNow.intValue() == 0) {
trigger.setStartTime(new Date());//防止立即生效
}
startQuertz.rescheduleJob(trigger.getKey(), trigger);
}

} catch (Exception e) {
log.error("更新cron定时任务运行时间失败[triggerKey=" + triggerKey + "]:", e);
return false;
}
return true;
}


xml配置:
[code]
<bean id="demoTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<bean class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="jobObj"/>
<property name="targetMethod" value="jobObj的方法名"/>
</bean>
</property>
<property name="cronExpression" value="0 0 3 * * ?"/>
</bean>
<!-- 配置线程池 -->
<bean id="taskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<!-- 线程池维护线程的最少数量 -->
<property name="corePoolSize" value="5"/>
<!-- 线程池维护线程所允许的空闲时间 -->
<property name="keepAliveSeconds" value="30000"/>
<!-- 线程池维护线程的最大数量 -->
<property name="maxPoolSize" value="1000"/>
<!-- 线程池所使用的缓冲队列 -->
<property name="queueCapacity" value="200"/>
</bean>
<!--如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuertz" lazy-init="true" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="taskExecutor" ref="taskExecutor"/>
<property name="triggers">
<list>
<ref bean="demoTrigger"/>
</list>
</property>
</bean>
[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 是一个用于创建独立的、生产级的Spring应用程序的框架。它简化了Spring应用程序的搭建和配置,提供了许多开箱即用的功能和插件,其中包括集成了Quartz调度器的支持。 Quartz是一个强大的、开源的调度框架,允许开发人员根据指定的时间表来执行任务。在Spring Boot中,可以通过Quartz来实现动态任务调度。 在Spring Boot中使用Quartz的步骤如下: 1. 添加依赖:在项目的pom.xml文件中添加Quartz的依赖。 2. 配置任务:创建一个继承自QuartzJobBean的任务类,实现executeInternal方法,在该方法中编写所需的任务逻辑。 3. 配置调度器:创建一个继承自SchedulerFactoryBean的配置类,通过调用setTriggers方法来设置触发器。可以根据需要设置任务的执行时间表达式、时间间隔等。 4. 启动应用程序:在Spring Boot的主类中添加@EnableScheduling注解,以启用任务调度器。 5. 运行应用程序:运行Spring Boot应用程序,Quartz将按照预定的时间表执行任务。 动态任务调度可以通过编程方式来实现,例如,在运行时根据一些条件来动态添加、删除、修改任务。可以使用Quartz的API来实现这些操作,例如,创建CronTrigger,然后将其添加到调度器中。还可以使用Quartz的JobDetail和Trigger来创建和管理动态任务。 总而言之,Spring Boot集成了Quartz调度器,使得开发人员能够方便地实现动态任务调度。通过配置和编程,可以创建或修改任务,然后按照指定的时间表来执行任务。这种动态任务调度机制可以帮助开发人员更灵活地管理任务,提高应用程序的效率和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值