永发信息网

spring 定时器的方法参数是否能动态修改

答案:2  悬赏:40  手机版
解决时间 2021-04-10 16:18
spring 定时器的方法参数是否能动态修改
最佳答案
很多时候,spring的quartz定时任务并不能完全满足项目的需要,经常会遇到需要任务的执行时间和频率是可控的,而不是写死在 quartz配置xml上面。为此,思考了很多动态修改任务执行的方法,以下方法是通过获取scheduler,对trigger的时间表达式进行修改,并重启任务去实现任务的动态变化。

  [java] view plain copy
  public class QuartzHandler {

  public static final String DEFAULT_GROUP_NAME = "DEFAULT";
  private static QuartzHandler instance = new QuartzHandler();
  private static Logger logger = Logger.getLogger(QuartzHandler.class);

  private QuartzManager quartzManager;
  private Scheduler scheduler;
  private ApplicationContext context;

  private QuartzHandler() {
  }

  public static QuartzHandler genInstance() {
  return instance;
  }

  
  public void start() {
  context = new ClassPathXmlApplicationContext(
  "spring/applicationContext.xml");
  scheduler = (StdScheduler) context.getBean("schedulerFactory");
  quartzManager = (QuartzManager) context.getBean("quartzManager");
  }

  
  public boolean updateCronExpression(String triggerName, String groupName,
  String cronExpression) {
  try {
  CronTrigger trigger = (CronTrigger) getTrigger(triggerName,
  groupName);
  if (trigger == null) {
  return false;
  }
  if (StringUtils.equals(trigger.getCronExpression(), cronExpression)) {
  logger.info("cronExpression is same with the running Schedule , no need to update.");
  return true;
  }
  trigger.setCronExpression(cronExpression);
  scheduler.rescheduleJob(trigger.getName(), trigger.getGroup(),
  trigger);
  logger.info("Update the cronExpression successfully!!");
  return true;
  } catch (ParseException e) {
  logger.error("The new cronExpression - " + cronExpression
  + " not conform to the standard. " + e);
  return false;
  } catch (SchedulerException e) {
  logger.error("Fail to reschedule. " + e);
  return false;
  }
  }

  
  public Trigger getTrigger(String triggerName, String groupName) {
  Trigger trigger = null;
  if (StringUtils.isBlank(groupName)) {
  logger.warn("Schedule Job Group is empty!");
  return null;
  }
  if (StringUtils.isBlank(triggerName)) {
  logger.warn("Schedule trigger Name is empty!");
  return null;
  }
  try {
  trigger = scheduler.getTrigger(triggerName, groupName);
  } catch (SchedulerException e) {
  logger.warn("Fail to get the trigger (triggerName: " + triggerName
  + ", groupName : " + groupName + ")");
  return null;
  }
  if (trigger == null) {
  logger.warn("Can not found the trigger of triggerName: "
  + triggerName + ", groupName : " + groupName);
  }
  return trigger;
  }
  }
全部回答
你可以自己写个类继承methodinvokingjobdetailfactorybean,类里面写个你的参数对象比如private string arg及一个方法(比如public void mymethod(string arg))接收你的参数并初始化arg,在配置的时候就配置为你自己的类和方法。然后按照你的需求去重新实现work方法(在里面调用getarg就达到你的需求)。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
天津航空的飞机怎么样,国行和天津航空哪个好
想买一只小狗,什么方法可以看出狗狗是否健康
- Has John arrived yet?-- No, she an hour
神武手游血耐宠打不打夜战站或高勇敢
请写一句赞美荷花的话,赞美天山的诗句
中国移动(新城通讯)我想知道这个在什么地方
很多物质能在氧气中燃烧,下列有关叙述正确的
端午节企业祝福短信,企业短信,通知短信,祝
现有200g溶质质量分数为20%的食盐溶液,若使
香坊区哈尔滨远大工程机械配件商店在哪里啊,
水牛跟黄牛都是原牛的后裔么?
新达联休闲在哪里啊,我有事要去这个地方
泊船瓜州的作者和诗句,泊船瓜洲这首诗中哪句
麝牛成群生活时,如果遇到狼群,雄牛就围成一
我有个己婚女人,有个离婚男人追我,说我是他
推荐资讯
翼讯怎么网银充值
青草网吧地址有知道的么?有点事想过去
岗咀路我想知道这个在什么地方
开面包车丢人吗,58同城怎么叫面包车
傅氏秘灸养生馆加盟需要多少钱?怎么加盟?
下列各句中画线的词语使用不当的一项是(3分
单选题王老师在上课时就某一部法律给出三个提
我想买800-1000元左右的普洱茶有哪些需要看的
下列可食用的部分主要是由子叶构成的是A.花生
请问都市高干小说《夫军甜宠》在哪里可以看到
形容武当山的诗句
宜宾电影院哪些银行信用卡可以9元看电影
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?