【发布时间】:2012-08-24 00:05:15
【问题描述】:
我有一个方法需要在每天 07:00 执行。
为此,我使用该方法创建了一个 bean,并使用 @Scheduled(cron="0 0 7 * * ?") 对其进行了注释。
在这个 bean 中,我创建了一个 main 函数 - 它将初始化 spring 上下文,获取 bean 并调用方法(至少是第一次),如下所示:
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(args[0]);
SchedulerService schedulerService = context.getBean(SchedulerService.class);
schedulerService.myMethod();
}
这很好用 - 但只有一次。
我想我明白为什么 - 这是因为 main 线程结束 - spring 上下文也是如此,所以即使 myMethod 用 @Scheduled 注释它也不会工作。
我想了一个方法来传递这个——意思是不要让main线程死掉,也许是这样的:
while (true){
Thread.currentThread().sleep(500);
}
这就是我认为应用程序上下文和我的 bean 将保持不变的方式。
我说的对吗?
有没有更好的方法来解决这个问题?
我正在使用 spring 3.1.2。
谢谢。
【问题讨论】:
标签: java spring scheduled-tasks