Spring Java - 运行进程每天执行一次任务

时间:2012-12-12 13:40:49

标签: java spring spring-mvc scheduled-tasks

我有一点问题(我使用的是Spring 3.1.1版)。我想在一天内启动执行任务的进程或线程。

所以例如: 我有一个用户列表,每个用户的总天数都是字段。

类用户{ 字符串...... 字符串...... DateTime countDays = ... 12-12-12 ... }

所以我想要做的是,当我启动应用程序(运行)时,我想每天执行一项任务: 遍历用户列表 检查countDays 如果countDays大于14,例如 发送内容给用户....

我知道如何循环并发送一些东西。我不知道如何启动一个对象让它在一天内执行一项任务。创建一个bean,构造它并使用sleep函数????

希望有人可以帮助我,谢谢你! :d

3 个答案:

答案 0 :(得分:4)

Spring非常支持Quartz调度程序......

http://static.springsource.org/spring/docs/3.0.x/reference/scheduling.html

您可以将任务设置为每天运行一次(例如午夜),使用CRON触发器bean

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="usersJob" />
    <property name="cronExpression" value="0 0 * * *" />
</bean>

答案 1 :(得分:4)

你也可以使用@Scheduled Annotation类似于:

@Scheduled(cron="0 0 * * *")
public void doStuff() {
   ..
}

检查此处的解除:there are a lot of different methods to do it

答案 2 :(得分:1)

使用Spring的TaskSchedulerTrigger接口。 TaskScheduler负责调度任务(Runnable对象)以执行,Trigger负责确定执行时间。

对于您的情况,TaskScheduler的ThreadPoolTaskScheduler实现应该绰绰有余。它将java.util.concurrent.ThreadPoolExecutor调整为TaskScheduler。

对于触发器实现,CronTrigger非常适合您的需求。它可用于创建触发器策略,以便每天同时执行任务。

示例Java代码:

Runnable task = /* your task */
TaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.schedule(task, new CronTrigger("0 0 * * *"));