经过前段时间的学习和铺垫,已经对spring amqp有了大概的了解。俗话说学以致用,今天就利用springAMQP来完成一个日志管理模块。大概的需求是这样的:系统中有很多地方需要记录操作日志,比如登录、退出、查询等,如果将记录日志这个操作掺杂在主要的业务逻辑当中,势必会增加响应的时间,对客户来说是一种不好的体验。所以想到用异步消息队列来进行优化。系统处理完主要业务逻辑之后,将日志的相关实体发布到特定Queue下,然后设置一个监听器,监该Queue的消息并做处理。客户不用等待日志的处理就可直接返回。

  大概的业务流程如下图所示。

  

 

  1.首先建立日志的数据表和实体,数据表起名为t_log。实体如下。主要包含操作者,操作的事件,操作时间等几个主要参数。  

复制代码
package com.xdx.entity;  import java.util.Date;  public class TLog {     private Integer logId;      private String operator;      private String event;      private Date createTime;      private Integer isDel;      public TLog(String operator, String event) {         this.operator = operator;         this.event = event;     }      public TLog() {     }      public Integer getLogId() {         return logId;     }      public void setLogId(Integer logId) {         this.logId = logId;     }      public String getOperator() {         return operator;     }      public void setOperator(String operator) {         this.operator = operator == null ? null : operator.trim();     }      public String getEvent() {         return event;     }      public void setEvent(String event) {         this.event = event == null ? null : event.trim();     }      public Date getCreateTime() {         return createTime;     }      public void setCreateTime(Date createTime) {         this.createTime = createTime;     }      public Integer getIsDel() {         return isDel;     }      public void setIsDel(Integer isDel) {         this.isDel = isDel;     } }
复制代码

  2.编写保存日志的方法,很简单,就是一个数据库的save过程。

  

复制代码
package com.xdx.service;  import javax.annotation.Resource;  import org.springframework.stereotype.Service;  import com.xdx.dao.BaseDao; import com.xdx.entity.TLog;  @Service public class LogService {     @Resource(name = "baseDao")     private BaseDao<TLog, Integer> baseDao;      public Integer saveLog(TLog log) {         Integer result = baseDao.addT("TLogMapper.insertSelective", log);         return result;     } }
复制代码

  其中的TLogMapper.insertSelective代码如下:

复制代码
 <insert id="insertSelective" parameterType="com.xdx.entity.TLog" >     insert into t_log     <trim prefix="(" suffix=")" suffixOverrides="," >      <if test="logId != null" >         log_id,       </if>      <if