当前位置: 首页 > 面试题库 >

使用Spring任务名称空间将任务调度为一次运行

高运诚
2023-03-14
问题内容

我将在春季使用任务名称空间设置一个计划任务计划。

我想根据cron表达式大多数的任务安排到火,有的在启动后只启动一次,一个固定的延迟,然后再也没有(即什么设置repeatCount,以0将实现在SimpleTriggerBean)。

是否有可能在任务名称空间中实现此目标,还是我需要恢复为触发器定义bean?


问题答案:

如果你看看任务命名空间XSD,你会发现只有三个不同的配置类型:fixed-delayfixed-ratecron

并且,如果您查看ScheduledTasksBeanDefinitionParser的来源,您将看到最多只能评估这些值之一。这是相关的部分:

String cronAttribute = taskElement.getAttribute("cron");
if (StringUtils.hasText(cronAttribute)) {
    cronTaskMap.put(runnableBeanRef, cronAttribute);
}
else {
    String fixedDelayAttribute = taskElement.getAttribute("fixed-delay");
    if (StringUtils.hasText(fixedDelayAttribute)) {
        fixedDelayTaskMap.put(runnableBeanRef, fixedDelayAttribute);
    }
    else {
        String fixedRateAttribute = taskElement.getAttribute("fixed-rate");
        if (!StringUtils.hasText(fixedRateAttribute)) {
            parserContext.getReaderContext().error(
                    "One of 'cron', 'fixed-delay', or 'fixed-rate' is required",
                    taskElement);
            // Continue with the possible next task element
            continue;
        }
        fixedRateTaskMap.put(runnableBeanRef, fixedRateAttribute);
    }
}

因此,没有办法组合这些属性。简而言之:名称空间无法帮助您。



 类似资料:
  • 问题内容: 是否可以在确切指定的时间仅安排一次Spring服务方法?例如,当前时间是下午2点,但是当我按下操作按钮时,我希望我的服务方法从晚上8点开始。我熟悉@Scheduled批注,并且不确定如何编写cron表达式以使其不定期运行。这一次,每天晚上8点触发。 有什么建议么? 问题答案: 你可以使用Spring的TaskScheduler的实现之一。我在下面提供了一个示例,该示例不需要太多的配置(

  • 是否可以只在指定的时间安排一次Spring服务方法?例如,当前时间是下午2点,但当我点击action按钮时,我希望我的服务方法在晚上8点开始。我很熟悉@Schedured注释,我不确定如何编写不定期运行的cron表达式。这个每天晚上8点触发。 有什么建议吗?

  • 问题3:如果我使用@Schedured(initaildelay=10000,fixedrate=20000)而不是@PostConstruct注释,它将解决第一个问题,但是它将每20秒执行一次我的作业。 有线索吗?

  • 简介 在过去,开发者必须在服务器上为每个任务生成单独的 Cron 项目。而令人头疼的是任务调度不受源代码控制,而且必须通过 SSH 连接到服务器上来增加 Cron 项目。 Laravel 的命令调度程序允许你在 Laravel 中对命令调度进行清晰流畅的定义。并且在使用调度程序时,只需要在服务器上增加一条 Cron 项目即可。调度是在 app/Console/Kernel.php 文件的 sche

  • 基本任务调度 方案1: 通过 @Cron 注解,这个需要依赖 cron4j 框架: //1分钟执行一次 @Cron("*/1 * * * *") public class MyTask implements Runnable { @Override public void run() { System.out.println("task running...");

  • 问题内容: 是否可以在确切指定的时间仅安排一次Spring服务方法?例如,当前时间是下午2点,但是当我按下操作按钮时,我希望我的服务方法从晚上8点开始。我熟悉@Scheduled批注,但不确定如何编写cron表达式以使其不定期运行。这一次,每天晚上8点触发。 有什么建议? 问题答案: 您可以使用Spring的TaskScheduler的实现之一。我在下面提供了一个示例,该示例不需要太多配置(包装了