Java 动态报表导出pdf/excel报表花费太多时间
我从数据库中获取了26000条记录,并将其放入一个列表中,而将该列表导出为PDF或excel会占用太多时间Java 动态报表导出pdf/excel报表花费太多时间,java,jasper-reports,dynamic-reports,Java,Jasper Reports,Dynamic Reports,我从数据库中获取了26000条记录,并将其放入一个列表中,而将该列表导出为PDF或excel会占用太多时间 report.toXlsx(new FileOutputStream(fileForXls)); 执行上述命令需要30到40秒。 如何减少其执行时间 代码 public synchronized String execute(){ JasperReportBuilder report = DynamicReports.report();//a new repor
report.toXlsx(new FileOutputStream(fileForXls));
执行上述命令需要30到40秒。
如何减少其执行时间
代码
public synchronized String execute(){
JasperReportBuilder report = DynamicReports.report();//a new report
StyleBuilder boldStyle = DynamicReports.stl.style().bold();
StyleBuilder boldCenteredStyle = DynamicReports.stl.style(boldStyle)
.setHorizontalAlignment(HorizontalAlignment.CENTER);
StyleBuilder columnTitleStyle = DynamicReports.stl.style(boldCenteredStyle)
.setBorder(DynamicReports.stl.pen1Point())
.setBackgroundColor(Color.LIGHT_GRAY);
report
.columns(
Columns.column("Sr #", "srNumber",DataTypes.integerType()).setWidth(40).setHorizontalAlignment(HorizontalAlignment.LEFT),
Columns.column("IR No", "irNo", DataTypes.stringType()).setWidth(130),
Columns.column("Status", "state", DataTypes.stringType()));
report.columnGrid()
.setIgnorePageWidth(true)
.title( // title of the report
Components
.text("IR Report")
.setStyle(boldCenteredStyle)
.setHorizontalAlignment(
HorizontalAlignment.CENTER))
.setColumnTitleStyle(columnTitleStyle)
.highlightDetailEvenRows()
.pageFooter(
Components.pageXofY().setStyle(
boldCenteredStyle))
.setDataSource(createDataSource());
String fileForXls="D:/IRReport.xlsx";
report.toXlsx(new FileOutputStream(fileForXls)); //time consuming code
return SUCCESS;
}
private JRDataSource createDataSource() {
DRDataSource dataSource = new DRDataSource("srNumber","irNo", "state");
List<ResultHeaderBean> data1= irdao.getAllRecords(); //returns List of 26000 records
int count=0;
for(ResultHeaderBean data:data1 ){
count=++count;
dataSource.add(count,crdata.getIrNumber(), crdata.getStatus());
}
return dataSource;
}
公共同步字符串执行(){
JasperReportBuilder report=DynamicReports.report();//新报告
StyleBuilder boldStyle=DynamicReports.stl.style().bold();
StyleBuilder boldCenteredStyle=DynamicReports.stl.style(boldStyle)
.setHorizontalAlignment(HorizontalAlignment.CENTER);
StyleBuilder columnTitleStyle=DynamicReports.stl.style(boldCenteredStyle)
.setboorder(DynamicReports.stl.pen1Point())
.setBackgroundColor(颜色:浅灰色);
报告
.栏目(
Columns.column(“Sr#”,“srNumber”,DataTypes.integerType()).setWidth(40).setHorizontalAlignment(HorizontalAlignment.LEFT),
Columns.column(“IR No”,“irNo”,DataTypes.stringType()).setWidth(130),
Columns.column(“Status”、“state”、DataTypes.stringType());
report.columnGrid()
.setIgnorePageWidth(真)
.title(//报告的标题
组件
.文本(“IR报告”)
.setStyle(粗体中心样式)
.setHorizontalAlignment(
水平对齐(中心)
.setColumnTitleStyle(columnTitleStyle)
.highlightDetailEvenRows()
.pageFooter(
Components.pageXofY().setStyle(
粗体(中心样式)
.setDataSource(createDataSource());
字符串fileForXls=“D:/unreport.xlsx”;
report.toXlsx(新文件输出流(fileForXls));//耗时代码
回归成功;
}
私有JRDataSource createDataSource(){
DRDataSource数据源=新的DRDataSource(“srNumber”、“irNo”、“state”);
List data1=irdao.getAllRecords();//返回26000条记录的列表
整数计数=0;
for(resultTheaderbean数据:data1){
计数=++计数;
add(count,crdata.getIrNumber(),crdata.getStatus());
}
返回数据源;
}
这仍然是每秒866个项目。完整代码花费了30秒?从包含的数据库读取?从数据库读取只需1或2秒,report.toXlxs()需要30秒您可以查看JRFileVirtualizer您是否尝试使用探查器?我没有使用profiler@AlexK