如果每步的mysql日志都入库,进行一次DB操作,不仅会影响操作的速度和响应,还会造成db操作过多.
因为,可以采用日志入库队列的形式.形成一个生产消费者,批量入库日志.这样做会获得很好的操作响应.
而且有时入库的时候,需要入库的消息种类很多,所以呢,重复代码会比较多.
下面贴出我的日志处理方式,这是一个抽象类.里面封装了队列和获取入库数据的方法.
@Slf4j
public abstract class BasePool<T> {
private LinkedBlockingQueue<T> dataQueue = new LinkedBlockingQueue<>();
private Object dataLock = new Object();
public List<T> getData(int size) {
log.debug("从队列中获取数据Step1>>>size="
+ dataQueue.size() + ">>>requestSize:" + size);
if (dataQueue != null && dataQueue.size() > 0) {
List<T> eleMeterDataDayList = new ArrayList<>();
int realSize = Math.min(size, dataQueue.size());
dataQueue.drainTo(eleMeterDataDayList);
if (dataQueue != null) {
log.debug("从队列中获取数据Step2>>>size:"
+ dataQueue.size() + ">&