在Spring MVC中调度任务

时间:2015-06-30 04:27:06

标签: java spring-mvc timer scheduled-tasks scheduler

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

感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

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

private TaskScheduler scheduler = new ConcurrentTaskScheduler();

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

答案 1 :(得分:0)

参考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"/>}

答案 2 :(得分:0)

您可以在标准Java API中轻松实现此目的,方法是在创建时间任务和客户输入目标日期之间的时差安排任务。只需将此差异作为参数delay

<强>的ScheduledThreadPoolExecutor

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

创建并执行在给定延迟后启用的ScheduledFuture。

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

创建并执行在给定延迟后启用的一次性动作。

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

您可以参考此答案进行日期之间的计算:

time difference