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