作用:将数据库操作请求,放入队列中,待定时任务执行时,批量执行数据库操作,以减轻数据库压力
package com.zy.data.sync.common.scheduled;
import com.zy.data.sync.moudles.mapper.ToMapper;
import lombok.SneakyThrows;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* @author javachen
* @description executeQueueConstant
*/
@Component
public class ExecuteScheduled
{
@Autowired
private SqlSessionFactory sqlSessionFactory;
public static Queue<String> queue = new LinkedList<String>();
@PostConstruct
public void init() throws InterruptedException {
//监听数据
//一秒提交一次
ScheduledExecutorService pool = Executors.newScheduledThreadPool(1);
pool.scheduleAtFixedRate(new Runnable(){
@SneakyThrows
@Override
public void run() {
// 关闭session的自动提交
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
try {
ToMapper toMapper = sqlSession.getMapper(ToMapper.class);
for (int i = 0; i < queue.size(); i++) {
String poll = queue.poll();
if(poll.startsWith("insert")){
toMapper.insert(queue.poll());
}
if(poll.startsWith("delete")){
toMapper.executeDel(queue.poll());
}
}
// 提交数据
sqlSession.commit();
sqlSession.rollback();
} catch (Exception e) {
sqlSession.rollback();
} finally {
sqlSession.close();
}
}
},0,1, TimeUnit.SECONDS);
}
public static void offer(String data){
queue.offer(data);
}
}