3

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

例如:我有一个用户列表,每个用户都有一个总天数作为字段。

类用户{字符串...字符串...日期时间countDays = ...12-12-12...}

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

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

希望有人能帮帮我,谢谢!:D

4

3 回答 3

5

您还可以使用类似于以下的@Scheduled 注解:

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

在这里检查 decumentation:有很多不同的方法可以做到这一点

于 2012-12-12T13:59:47.410 回答
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>
于 2012-12-12T13:42:05.723 回答
1

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

对于您的情况,TaskScheduler 的ThreadPoolTask​​Scheduler实现应该绰绰有余。它将 java.util.concurrent.ThreadPoolExecutor 改编为 TaskScheduler。

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

示例 Java 代码:

Runnable task = /* your task */
TaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.schedule(task, new CronTrigger("0 0 * * *"));
于 2012-12-12T14:04:16.153 回答