Java Spring启动-异步写入多个Excel工作表
我必须将数据填充到多张excel表格中,由于每张表格中要写入的数据量很大,处理时间非常慢,我需要异步写入表格 我有一个控制器,它将返回工作簿的ByteArrayOutputStream 到目前为止,我所做的尝试如下Java Spring启动-异步写入多个Excel工作表,java,spring-boot,asynchronous,async-await,completable-future,Java,Spring Boot,Asynchronous,Async Await,Completable Future,我必须将数据填充到多张excel表格中,由于每张表格中要写入的数据量很大,处理时间非常慢,我需要异步写入表格 我有一个控制器,它将返回工作簿的ByteArrayOutputStream 到目前为止,我所做的尝试如下 @PostMapping("/downloadFile") public ResponseEntity<Resource> getFile(@RequestPart("reqObj") String reqO
@PostMapping("/downloadFile")
public ResponseEntity<Resource> getFile(@RequestPart("reqObj") String reqObj) {
logger.info("*************** Inside downloadFile API *****************");
JSONObject jsonObject = new JSONObject(reqObj);
return fileGeneration.generate(jsonObject.getInt("Id"));
}
和异步服务下面
@Service
public class BaseLineDcmFileGenerationAsyncService {
@Async("asyncExecutor")
public CompletableFuture populateSheetOne(Workbook workbook, SheetOne sheetOneData) {
Sheet sheet = workbook.getSheet("SheetOne");
Row headerRow = sheet.createRow(0);
for (int col = 0; col < headers.length; col++) {
Cell cell = headerRow.createCell(col);
cell.setCellStyle(setBoldFont(workbook));
cell.setCellValue("value_from_an_static_array");
}
for(int i = 0; i < sheetOneData.size(); i++) {
Row row = sheet.createRow(i+1);
row.createCell(0).setCellValue(sheetOneData.getData());
.....
}
return CompletableFuture.completedFuture(workbook);
}
@Async("asyncExecutor")
public CompletableFuture populateSheetOne(Workbook workbook, SheetTwo sheetTwoData) {
Sheet sheet = workbook.getSheet("SheetTwo");
Row headerRow = sheet.createRow(0);
for (int col = 0; col < headers.length; col++) {
Cell cell = headerRow.createCell(col);
cell.setCellStyle(setBoldFont(workbook));
cell.setCellValue("value_from_an_static_array");
}
for(int i = 0; i < sheetTwoData.size(); i++) {
Row row = sheet.createRow(i+1);
row.createCell(0).setCellValue(sheetTwoData.getData());
.....
}
return CompletableFuture.completedFuture(workbook);
}
private CellStyle setBoldFont(Workbook wb) {
CellStyle style = wb.createCellStyle();
Font font = wb.createFont();
font.setBold(true);
style.setFont(font);
return style;
}
}
@服务
公共类BaseLineDcmFileGenerationAsyncService{
@异步(“异步执行器”)
public CompletableFuture populateSheetOne(工作簿工作簿,SheetOne sheetOneData){
Sheet Sheet=工作簿.getSheet(“SheetOne”);
Row headerRow=sheet.createRow(0);
for(int col=0;col
@Configuration
@EnableAsync
public class AsyncConfiguration
{
@Bean(name = "asyncExecutor")
public Executor asyncExecutor()
{
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(100);
executor.setThreadNamePrefix("AsynchThread-");
executor.initialize();
return executor;
}
}
@Service
public class BaseLineDcmFileGenerationAsyncService {
@Async("asyncExecutor")
public CompletableFuture populateSheetOne(Workbook workbook, SheetOne sheetOneData) {
Sheet sheet = workbook.getSheet("SheetOne");
Row headerRow = sheet.createRow(0);
for (int col = 0; col < headers.length; col++) {
Cell cell = headerRow.createCell(col);
cell.setCellStyle(setBoldFont(workbook));
cell.setCellValue("value_from_an_static_array");
}
for(int i = 0; i < sheetOneData.size(); i++) {
Row row = sheet.createRow(i+1);
row.createCell(0).setCellValue(sheetOneData.getData());
.....
}
return CompletableFuture.completedFuture(workbook);
}
@Async("asyncExecutor")
public CompletableFuture populateSheetOne(Workbook workbook, SheetTwo sheetTwoData) {
Sheet sheet = workbook.getSheet("SheetTwo");
Row headerRow = sheet.createRow(0);
for (int col = 0; col < headers.length; col++) {
Cell cell = headerRow.createCell(col);
cell.setCellStyle(setBoldFont(workbook));
cell.setCellValue("value_from_an_static_array");
}
for(int i = 0; i < sheetTwoData.size(); i++) {
Row row = sheet.createRow(i+1);
row.createCell(0).setCellValue(sheetTwoData.getData());
.....
}
return CompletableFuture.completedFuture(workbook);
}
private CellStyle setBoldFont(Workbook wb) {
CellStyle style = wb.createCellStyle();
Font font = wb.createFont();
font.setBold(true);
style.setFont(font);
return style;
}
}