基于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();
}
}
}