Spring Boot & ThreadPoolTaskExecutor: 高效处理百万级数据批量插入
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.concurrent.Future;
@Service
public class DataImportService {
private final ThreadPoolTaskExecutor executor;
public DataImportService(ThreadPoolTaskExecutor executor) {
this.executor = executor;
}
public void importData(List<DataObject> dataList) {
executor.execute(() -> {
// 分批插入数据
int batchSize = 10000;
List<DataObject> batch;
int fromIndex = 0;
int toIndex = Math.min(batchSize, dataList.size());
while (fromIndex < dataList.size()) {
batch = dataList.subList(fromIndex, toIndex);
// 执行数据插入操作
insertDataBatch(batch);
fromIndex = toIndex;
toIndex = Math.min(fromIndex + batchSize, dataList.size());
}
});
}
private void insertDataBatch(List<DataObject> batch) {
// 实现数据的批量插入逻辑
}
}
这个代码示例展示了如何在Spring Boot应用中使用ThreadPoolTaskExecutor
来异步处理大量数据的插入。importData
方法接收一个数据对象列表,并且使用线程池来异步处理数据的插入。每个批次的大小被设置为10000,以防止内存消耗过多。insertDataBatch
方法是一个占位符,你需要根据实际的数据库操作来实现数据的批量插入逻辑。
评论已关闭