从spring 4 web mvc安排特定时间的任务

时间:2016-10-05 10:31:01

标签: java spring spring-mvc cron

我正在为贸易自动化网站构建Spring 4 Rest API。

http请求将包含一些信息以及日期时间。将这些信息插入数据库后(使用hibernate),我需要动态创建一个新的cron作业,它将访问这些数据库信息并执行某些操作。 cron作业必须在上面指定的时间执行

因此,不会有固定的cron表达式,cron任务也必须访问使用 @Repository 注释的DAO层。 即使在堆栈和其他博客中引用了很多帖子,其中讲述了 @Scheduled Spring-Quartz集成,我也无法找到解决方案。具体需要。

首选Java / Annotation配置。

请帮忙。 感谢

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您可以使用TriggerTaskScheduler接口。以下示例。要在将来取消作业,需要存储ScheduledFuture实例。

@Configuration
public class AppConfiguration {

    @Bean
    public ThreadPoolTaskScheduler taskScheduler() {
        return new ThreadPoolTaskScheduler();
    }
}

@Controller
public class TriggerService {

    @Autowired
    private TaskScheduler scheduler;

    @Autowired
    private DAOService db;

    private ScheduledFuture job;        

    @GetMapping("/task1")
    @ResponseBody
    public void triggerMyTask(@RequestParam String cronExpression) {

        Runnable runnable = new Runnable() {            
            @Override
            public void run() {
                log.info(new Date());
                /**
                 * here You can do what You want with db
                 * using some DAOService
                 */         
                db.count();
            }
        };

        /**
         * cancel current task if You need
         */
        if(job != null) {
           job.cancel(true);
        }

        CronTrigger trigger = new CronTrigger(cronExpression);
        job = scheduler.schedule(runnable, trigger);
    }
}

您可以传递cron表达式,例如:

http://localhost:8080/task1?cronExpression=0/5%20*%20*%20*%20*%20*