在 Spring MVC 中安排任务

Scheduling a Task in Spring MVC

在我的 Spring MVC 应用程序中,我需要安排具有特定日期和时间的任务。就像-我必须安排发送一封电子邮件,该电子邮件将由客户动态配置。在 Spring 中有 @Schedule 注释,但我如何每次使用任何日期和时间动态更改值。

感谢任何帮助。

您应该尝试 TaskScheduler,请参阅 javadoc here:

private TaskScheduler scheduler = new ConcurrentTaskScheduler();

@PostConstruct
private void executeJob() {
    scheduler.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            // your business here
        }
    }, INTERVAL);
}

参考Spring Task Execution and Scheduling

示例注释

@Configuration
@EnableAsync
@EnableScheduling
public class MyComponent {

    @Async
    @Scheduled(fixedDelay=5000, repeatCount=0)
    public void doSomething() {
       // something that should execute periodically
    }
}

我认为 repeatCount=0 将使函数只执行一次(尚未测试)

Quartz 调度器的完整示例http://www.mkyong.com/spring/spring-quartz-scheduler-example/

需要引入XML配置如下

<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>
<task:executor id="myExecutor" pool-size="5"/>
<task:scheduler id="myScheduler" pool-size="10"/>}

您可以在标准 java API 内轻松实现此目的,方法是针对创建任务的时间与客户输入的目标日期之间的时间差安排任务。只需提供此差异作为参数 delay.

ScheduledThreadPoolExecutor

schedule(Callable<V> callable, long delay, TimeUnit unit)

Creates and executes a ScheduledFuture that becomes enabled after the given delay.

ScheduledFuture<?>  schedule(Runnable command, long delay, TimeUnit unit)

Creates and executes a one-shot action that becomes enabled after the given delay.

因此您必须向此服务提交 Runnable 或 Callable。

日期之间的计算可以参考这个答案:

time difference