derpvail 2009-08-05 00:45
浏览 196
已采纳

关于spring中的quartz应用

最近做东西遇到这样一个问题。
我的CMS文章模块中,文章生成静态页可以有三种选择(1)立刻发布[color=red](2)定时发布[/color](3)不发布。
所遇到的问题就出在[color=red](2)定时发布[/color]这块。因为每天编辑要编写很多文章,也有很多文章要定时发布。我的架构是struts2+spring2.0+hibernate3.1,所以我想用quartz来实现这个定时发布。像这样的情况,用quartz该如何去做。
我看了网上一些quartz的文章。很多都是转载的,我都跑不起来。
[color=red]最好能给一个这方面的具体例子。代码+注释这种就最好了。
我很需要这方面详细的例子,所以希望大家能说得详细些。[/color]

[b]问题补充:[/b]
zhanglinjian 您好!谢谢你的解答!

您的配置cronExpression表达式是写在配置文件里面,我不想把这个写死。用户可以根据javascript日历自动选择发布时间。格式如:2009-08-08 11:30:05
这样的形式,然后把这个时间写在quartz里面,到了这个时间,程序自动去发布,这是针对每一篇文章的。

请问这个该如何去做?
[b]问题补充:[/b]
cats_tiger,谢谢你的帮助。但是我的问题又做了补充,请您看看有没有什么方法来解决我的问题。

  • 写回答

5条回答 默认 最新

  • catstiger 2009-08-05 13:11
    关注

    这个就优点麻烦了,网上的没一个是正确的。我回头写一篇Blog吧。下面的代码是如何正确的重启:

    [code="java"]
    @Autowired(required = true)
    private ApplicationContext ctx;

    /**

    • 两个任务中的一个cron改变,则重新启动Quartz任务。
    • @param seisCron CRON1
    • @param signCron CRON2
    • @throws ApplicationException 如果CRON无法解析,或原来的任务无法关闭,以及无法启动新任务.
      */
      private void restartJobs(String seisCron, String signCron) {
      if(StringUtils.isBlank(seisCron) || StringUtils.isBlank(signCron)) {
      logger.warn("CRON未设定。");
      return;
      }
      //trim一下,难保数据库里面没有空格
      seisCron = seisCron.trim();
      signCron = signCron.trim();
      //得到两个trigger
      CronTrigger seismicCronTrigger = (CronTrigger) ctx.getBean("seismicEmailCronTrigger", CronTrigger.class);
      CronTrigger signCronTrigger = (CronTrigger) ctx.getBean("signEmailCronTrigger", CronTrigger.class);
      //如果两个频率都没有变,则不必重新启动.
      if(seisCron.equals(seismicCronTrigger.getCronExpression()) &&
      signCron.equals(signCronTrigger.getCronExpression())) {
      logger.info("频率未改变,Quartz不必重新启动.");
      return;
      }

      //得到SchedulerFactoryBean的实例,注意beanName前面的&符号
      SchedulerFactoryBean schedulerFactory = (SchedulerFactoryBean) ctx.getBean("&emailSchedulerFactory");
      try {
      //重新设定trigger
      seismicCronTrigger.setCronExpression(seisCron);
      signCronTrigger.setCronExpression(signCron);
      schedulerFactory.destroy(); //关闭原来的任务
      schedulerFactory.afterPropertiesSet(); //启动新的任务
      logger.info("前兆和测震邮件发送任务启动成功.");
      } catch (ParseException e) {
      throw new ApplicationException("Cron表达式解析错误." + e.getMessage());
      } catch (SchedulerException e) {
      e.printStackTrace();
      throw new ApplicationException("关闭定时任务出现异常.");
      } catch (Exception e) {
      e.printStackTrace();
      throw new ApplicationException("启动定时任务出现异常.");
      }

      }

    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图