天天看點

基于mybatisplus 的 java 異步儲存隊列

基于mybatisplus 的 java 異步儲存隊列

異步儲存,減少與資料庫之間的互動造成的堵塞使性能下降

import com.baomidou.mybatisplus.extension.service.IService;

import java.util.LinkedList;
import java.util.List;

/**
 * ClassName: MybatisSaveMQ
 * Description: 儲存隊列
 * date: 2021-03-19
 *
 * @since JDK 1.8
 */

public class MybatisSaveMQ<T> {

    private volatile List<T> list = new LinkedList<>();

    private volatile List<T> saveList ;

    private volatile List<T> cleanList = new LinkedList<>();

    private final IService<T> service;

    private final Class<T> clazz;

    private volatile int threadNum = 0;

    public MybatisSaveMQ(IService<T> service,Class<T> clazz){
        this.service = service;
        this.clazz = clazz;
    }

    public void save(T t){
        this.list.add(t);
        if(threadNum < 3){
            threadNum ++;
            new Thread(){
                @Override
                public void run() {
                    synchronized (clazz){
                        saveList = list;
                        list = cleanList;
                        service.saveBatch(saveList);
                        cleanList = saveList;
                        cleanList.clear();
                        threadNum --;
                    }
                }
            }.start();
        }
    }

}