0

如何使用应用程序服务器实现类似一段时间(真实)的行为?
如果我需要每隔几秒钟更改我的持久数据,并且每个周期都应该调用过程 A、B、C:

public class Runner
{    
    List values;

    public void repeat() 
    {
        while (true)
        {
            changeSomeDataA();
            changeSomeDataB();
            changeSomeDataC();
        }
    }
}
4

3 回答 3

1

对 EJB 的定时器服务使用 @Schedule 注解。喜欢

  @Schedule(second="*/3", minute="*", hour="*")
  public void automaticChangeOnTimer() {
        changeSomeDataA();
        changeSomeDataB();
        changeSomeDataC();
        logger.info("Automatic called the method");
  }

有关详细信息,请查看以下链接:

http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html

于 2013-06-20T11:25:09.823 回答
0

Java EE 规范提供了创建 EJB Timer 的可能性,这对于在特定时间段执行业务逻辑很有用。

每个 EJB 版本(2.1、3.0、3.1)都包含了可以实现该组件的形式的更改,因此您必须根据您的 java 版本搜索示例代码。

于 2013-06-19T03:08:57.583 回答
-2

根据提供的信息,一种解决方案是在再次调用方法之前启动一个休眠 5 秒的线程,例如:

// init (e.g. with servlet init())
Runner r = new Runner();
Thread t = new Thread(r);
t.start();

// and later (e.g. with servlet destroy())
r.stopRunning();
t.interrupt();
t.join();

而你的 Runner 你只需要更新一点,这样你就可以在一个线程中运行它。

public class Runner implements Runnable
{    
    List values;
    boolean running = true;

    public void run() 
    {
        while (running)
        {
            changeSomeDataA();
            changeSomeDataB();
            changeSomeDataC();

            try {
                Thread.sleep(5000);
            } catch(InterruptedException e) {
                // we do not really need to react here, do we?
            }
        }
    }
}

请注意,您需要将对 Runner 和 Thread 的引用存储在一个不会被意外垃圾收集的对象(如您的 Servlet 实例)中。当然请包装好。

于 2013-06-18T21:18:01.840 回答