如何使用日历对象在 spring 调度程序中安排任务?

how to schedule task in spring scheduler by using calendar object?

我正在开发基于 spring 的 Web 应用程序。要求如下:
用户输入日期(字符串格式)。
为该日期安排任务(仅一次)

我的代码是:

calendar.setTime(formatter.parse(dateFromForm));
int day = calendar.get(Calendar.DAY_OF_MONTH);
int month = calendar.get(Calendar.MONTH);
.
.
String cornExp = "0 "+minutes+" "+hours+" "+day+" "+month+" "+year;

我想将 cornExp 值传递给:

@Scheduled(cron=**cornExp**)  

我该怎么做?

您可以使用此 link 作为分步指南

基本上,您需要一个 CronTrigger 对象,然后需要以编程方式从数据库设置 trigger.setCronExpression

你可以使用ThreadPoolTaskScheduler

像这样使用 spring Bean 和 springside project 中的代码:

ThreadPoolTaskScheduler threadPoolTaskScheduler;
@PostConstruct
public void start() {
    .
    .
    calendar.setTime(formatter.parse(dateFromForm));
    int day = calendar.get(Calendar.DAY_OF_MONTH);
    int month = calendar.get(Calendar.MONTH);
    .
    .
    final String cornExp = "0 "+minutes+" "+hours+" "+day+" "+month+" "+year;

    threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
    threadPoolTaskScheduler.setThreadNamePrefix("SpringCronJob");
    threadPoolTaskScheduler.initialize();

    threadPoolTaskScheduler.schedule(new Runable(){
        @Override
        public void run() {
            //run task
            //...
        }
    }
         , new CronTrigger(cornExp));
}

@PreDestroy
public void stop() {
    ScheduledExecutorService scheduledExecutorService = threadPoolTaskScheduler.getScheduledExecutor();
    scheduledExecutorService.shutdown();
}