如何在我的网络服务中每天00:00调用一个函数

时间:2015-05-12 07:53:15

标签: java multithreading web-services rest

我的问题是我有一个使用类Gestion的RESTful Web服务。 在这个课程中,我有一个函数_update_,我想在00:00每天调用这个函数。

我不知道该怎么做,所以我查看了Web,我发现使用线程可能是一个不错的选择。但是,我不知道如何使用它。我是否必须将_update_函数移动到新类中?

2 个答案:

答案 0 :(得分:1)

如果您使用的是EJB ,则可以使用计时器服务

@Singleton
public class TimerService {
    @Inject
    HelloService helloService;

    @Schedule(second="0", minute="0", hour="0")
    public void update(){
        System.out.println("timer: " + helloService.sayHello());
    }
}

https://docs.oracle.com/javaee/7/tutorial/ejb-basicexamples004.htm

答案 1 :(得分:1)

使用任何开源作业或调度程序更多详细信息。 http://toppersworld.com/top-10-open-source-java-job-schedulers/ 或者做纯编码。这个链接可以帮到你。 Get milliseconds until midnight。在一个线程中睡到午夜,醒来做任务再去睡觉。

@Override
public void run() {
    while (true) {
        try {
            Thread.sleep(calculateSleepingTime());
            // do what ever you want
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

private long calculateSleepingTime() throws ParseException {

    Calendar c = Calendar.getInstance();
    c.add(Calendar.DAY_OF_MONTH, 1);
    c.set(Calendar.HOUR_OF_DAY, 0);
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MILLISECOND, 0);
    return (c.getTimeInMillis()-System.currentTimeMillis());
}