首页 > 解决方案 > Java Spring - 函数的动态调度

问题描述

我一直在尝试使用 Spring,但我是新手。我和我一起工作过Quartz,我很清楚这一点。但目前我正在尝试在Spring. 我试图每 5 秒调用一次方法,其中我的cron模式来自database. 虽然我能够设置cron模式,但我不确定如何调用该函数。请指导。

代码:

package com.test;

import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;

public class Innovation implements Runnable
{
     public Innovation(TaskScheduler scheduler,String cron) 
     {
            scheduler.schedule(this, new CronTrigger("* * * ? * *"));
     }

     public void test()
     {
         System.out.println("This is new scheduled every 5 seconds");
     }

     @Bean
     public TaskScheduler taskScheduler() {
         //org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler
         return new ThreadPoolTaskScheduler();
     }

    public static void main(String[] args) 
    {
        Innovation a=new Innovation(null, null);


    }

    @Override
    public void run() {
        // TODO Auto-generated method stub

    }

}

标签: javaspringspring-bootscheduled-tasks

解决方案


看起来您缺少测试方法上的@Scheduled注释。我也不确定您是否需要与现有代码一样多的代码-这是一个基本示例,显示了我如何使用它:

@PropertySource(("classpath:event.properties"))
@Component
public class SerialNumbersToNetSuite {

    @Async
    @Scheduled(cron = "${sn_db_to_ns}") 
    public void start() throws SQLException, IOException, ServiceException, SOAPException {
        LOGGER.debug("Adding serial numbers...");
        ....
    }
    ....
}

event.properties 有这样一行:

sn_db_to_ns =  0 0 */2 * * *

以防万一您错过了 cron 符号(或任何其他偶然发现此符号的人),这里是 cron 格式文档


推荐阅读