上次写的一篇博客,多线程异步操作日志不完整,现在写一个完整的
功能是:用户访问一个controller,将访问的记录保存到队列中去,在开启定时器,消费掉记录保存到文件中(可改为保存到数据库)
我的idea目录:
controller中的代码:
package com.tencent.concurrent_log.controller;
import com.tencent.concurrent_log.model.LogEntity;
import com.tencent.concurrent_log.service.UrlVisitService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class UrlVisitController {
private static final Logger LOG = LoggerFactory.getLogger(UrlVisitController.class);
@Autowired
private UrlVisitService urlVisitService;
@RequestMapping(value = "/visit/{url}",method = RequestMethod.GET)
@ResponseBody
public String urlvisit(@PathVariable String url){
Integer userId = 666;
String ip = null;
String cookieValue = null;
LogEntity entity = initEntity(userId, ip, cookieValue, url);
try {
urlVisitService.operLog(entity);
return "ok";
} catch (Exception e) {
LOG.error("urlvisit<|>url:"+url,e.getMessage(),e);
return "fail";
}
}
private LogEntity initEntity(Integer userId,String ip,String cookieValue,String url){
LogEntity entity = new LogEntity(null, null, url, ip, cookieValue, userId);
return entity;
}
}
service的实现类: