java动态crontab表达式_动态改变Cron表达式,来实现动态执行Spring定时任务



spring定时器非常强大,但是有时候我们需要在不需要重启应用就可以动态的改变Cron表达式的值。这样我们可以在配置文件中写一个表达式的值。每次想改变表达式的值的时候手动修改配置文件中的表达式,实现动态表达式。但是我们也可以从数据库中动态读取,都是一样的。

一:首先定义一个类,这个类用于被定时器调度,这个类不需要继承任何类或者接口。

MyJob.java

package quartz2;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.quartz.Scheduler;

import org.springframework.scheduling.quartz.CronTriggerBean;

public class MyJob {

private Scheduler scheduler;

private static int step=0;

public void setScheduler(Scheduler scheduler) {

this.scheduler = scheduler;

}

/**

* 定时调用此方法

* @throws Exception

*/

public void doSomething() throws Exception {

System.out.println("***********************"+step+"***********************");

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String str=df.format(new Date());

System.out.println("time:"+str);

if(step==1){

//满足特定的条件 调用此方法 重设表达式 重新开启新的任务

//表达式可以根据需求从配置文件 或者数据库中读取

resetJob("0/10 * * * * ?");

}

step++;

}

/**

* 重设定时器表达式

* @param cronExpression

* @throws Exception

*/

public void resetJob(String cronExpression) throws Exception {

CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger("myTrigger", Scheduler.DEFAULT_GROUP);

String oldConExpression = trigger.getCronExpression();

if (!oldConExpression.equalsIgnoreCase(cronExpression)) {

trigger.setCronExpression(cronExpression);

scheduler.rescheduleJob("myTrigger", Scheduler.DEFAULT_GROUP, trigger);

}

}

}

spring配置文件

0/20 * * * * ?

客户端代码

Config.java

package quartz2;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Config {

public static void main(String[] args) {

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

}

}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值