在Spring3+;中添加计时器(用于任务调度)的正确方法是什么;基于Tiles的web应用程序?

在Spring3+;中添加计时器(用于任务调度)的正确方法是什么;基于Tiles的web应用程序?,spring,jakarta-ee,spring-mvc,apache-tiles,Spring,Jakarta Ee,Spring Mvc,Apache Tiles,我想知道在Spring3+中,是否有合适的方法为任务计划添加计时器(它将被计数),从而精确地工作。我尝试过许多选项,比如jquerytimer+(客户端)Quartz(服务器端线程),但尽管它并不准确,而且在某种程度上,我们可以说它对于web应用程序来说是一种糟糕的做法。 我真正想要(想要管理)的是我的Web应用程序(Spring3+Tiles),当用户单击计时器开始时,它应该在客户端启动,计时器应该一直持续到用户单击停止,但是用户可以在Web应用程序中做任何其他事情(如导航到任何其他页面),但

我想知道在Spring3+中,是否有合适的方法为任务计划添加计时器(它将被计数),从而精确地工作。我尝试过许多选项,比如jquerytimer+(客户端)Quartz(服务器端线程),但尽管它并不准确,而且在某种程度上,我们可以说它对于web应用程序来说是一种糟糕的做法。 我真正想要(想要管理)的是我的Web应用程序(Spring3+Tiles),当用户单击计时器开始时,它应该在客户端启动,计时器应该一直持续到用户单击停止,但是用户可以在Web应用程序中做任何其他事情(如导航到任何其他页面),但计时器应该以静态方式工作。有很多问题,好像只有我在客户端实现计时器(使用cookies,jquery会话客户端)然后,如果用户导航到另一个页面,我必须管理计时器是否必须从存储在Cookie中的上一个时间开始,但这样做会导致在请求响应过程中损失秒数。因此,我还尝试使用quartz实现服务器端计时器,但我必须在每次单击时将其与客户端计时器同步web应用程序。所以,这也是我的感受。 所以,我可以在Spring3+互动程序中引入任何东西,它们可以是静态的,并且可以以静态方式保持计时器

提前准备好

好的,那么你需要简单的词语。你可以用它来实现这个。 要将atmosphere与Spring MVC集成,您可以查看此示例。集成后,您只需在服务器端执行此操作

@RequestMapping(value = "/websockets", method = RequestMethod.GET)
    @ResponseBody
    public void websockets(final AtmosphereResource event) {

        AtmosphereUtils.suspend(event);
        final Broadcaster bc = event.getBroadcaster();
        bc.scheduleFixedBroadcast(new Callable<String>() {

            public String call() throws Exception {

                return (new Date()).toString();
            }
        }, 1, TimeUnit.SECONDS);


    }
只要暂停get请求并定期广播当前时间,您可以根据需要进行扩展。我刚刚给了您一个原始想法。希望这对您有所帮助

function startTimer() {
var callbackAdded = false;

function callback(response)
{

    $.atmosphere.log('info', ["response.state: " + response.state]);
    $.atmosphere.log('info', ["response.transport: " + response.transport]);

    if (response.transport != 'polling' && response.state != 'connected' &&                  response.state != 'closed') {
        $.atmosphere.log('info', ["response.responseBody: " + response.responseBody]);
        if (response.status == 200) {
            var data = response.responseBody;

            if (data) {
                $("#date").text(data);
            }
        }
    }
}
$.atmosphere.subscribe("${pageContext.request.contextPath}/user/websockets",
    !callbackAdded? callback : null,
$.atmosphere.request = {transport: 'websocket'});
connectedEndpoint = $.atmosphere.response;
callbackAdded = true;
  };