【问题标题】:How can I call a function every day at 00:00 in my web service如何在我的 Web 服务中每天 00:00 调用一个函数
【发布时间】:2015-05-12 07:53:14
【问题描述】:

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

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

【问题讨论】:

  • 您使用的是哪种语言、版本等?
  • 哦,对不起,我完全忘了提到这一点。我在 Tomcat 7.0 Servlet 容器上使用带有 Jersey 2 的 Java。
  • 使用像Quartz这样的cron作业库。
  • 为什么不只是老旧的cron

标签: java multithreading web-services rest


【解决方案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

【讨论】:

  • 很遗憾,我没有使用 EJB。 :(我还是会试试看怎么用。
【解决方案2】:

使用任何开源作业或调度程序更多详细信息在这里。 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());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 2021-04-24
    相关资源
    最近更新 更多