【问题标题】:How to program the spring MVC cron without annotation如何在没有注释的情况下编写spring MVC cron
【发布时间】:2016-12-04 18:58:45
【问题描述】:
package com.test.cron; 

@Service 

public class CronJob { 
    protected static final Logger logger = Logger.getLogger(CronJob.class);

    @Scheduled(cron="0 0 23 * * *")
    public void demoServiceMethod()
    {
        logger.debug("Cron job started.");
    }
}

Cron 执行时间会经常改变。 我必须将“@Scheduled”注释交换为 java 代码。

【问题讨论】:

    标签: spring cron annotations


    【解决方案1】:

    旧线程,但问题没有真正的答案。

    这是一种无需任何注释即可安排作业的方法。 该示例在 Kotlin 中,但在 java 中的工作方式相同。

    @Component
    class CliRunner(
        private val scheduler: ThreadPoolTaskScheduler,
        private val scheduledService: ScheduledService
    ) : CommandLineRunner {
    
        override fun run(vararg args: String) {
            scheduler.scheduleAtFixedRate(scheduledService::run, 10_000)
        }
    }
    

    注入ThreadPoolTaskScheduler 和任何你想调度的东西,并调用调度器上的任何调度方法。

    我的示例安排 run 方法每 10 秒执行一次。

    【讨论】:

      【解决方案2】:

      您可以使用数据库来配置计划,Quartz 能够将其作业元数据保存在数据源中。 有人在这里实现了类似的东西。

      https://github.com/davidkiss/spring-boot-quartz-demo

      【讨论】:

        【解决方案3】:

        您可以将此 cron 值外部化到属性文件中。

        @Scheduled(cron="${schedularTime}")
        

        在您的属性文件中(例如:application-dev.properties)

        schedularTime=0 0/2 * * * ?
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-03
          • 2013-01-13
          • 1970-01-01
          相关资源
          最近更新 更多