在我的Spring / Hibernate / MVC应用程序中,我实现了一些长时间运行的函数。在这种情况下,我想告知用户状态。
我想知道,如果我可以向前端获取某些log4j消息,例如:
DEBUG d.t.webapp.services.StageServiceImpl - Fetching result
DEBUG d.t.webapp.services.StageServiceImpl - loaded 1000 rows
DEBUG d.t.webapp.services.StageServiceImpl - loaded 1000 rows
DEBUG d.t.webapp.services.StageServiceImpl - loaded 1000 rows
DEBUG d.t.webapp.services.StageServiceImpl - loaded 994 rows
这些消息应该逐步出现在前端,因为它们是由后端产生的,具有最小的延迟。这是否可能或有更好的解决方案吗?
答案 0 :(得分:1)
或者为什么不使用这样的东西:
1#创建一个控制器,为您提供工作人员的最后状态
@RestController
@RequestMapping(value = "/worker")
public WorkerStatusProviderController {
@Autowired
WorkerStatusProvider workerStatusProvider;
@RequestMapping(value = "/status/{id}", method = RequestMethod.GET)
public new ResponseEntity<WorkerStatus> getStatus(@PathVariable("id") long workerId){
//retrieve last worker status
WorkerStatus lastStatus = workerStatusProvider.getLastStatus(workerId);
//send worker status to front
return new ResponseEntity<WorkerStatus>(lastStatus, HttpStatus.OK);
}
}
2#在前端使用Ajax每隔2或3秒调用一次该控制器,并向用户显示最后一个状态。
//call /worker/status/id every 2 seconds
setInterval(function(){
$.get("/worker/status/100", function(workerStatus, status) {
//display worker status to the user
alert("workerStatus: " + workerStatus);
});
}, 2000);