博客
关于我
开源UReport 整合到产品中实践简要:(四)UReport 自定义mysql数据库表的存储器
阅读量:566 次
发布时间:2019-03-09

本文共 4361 字,大约阅读时间需要 14 分钟。

UReport2报表存储机制文档

一、默认报表存储器

UReport2默认提供的"服务器文件系统"报表存储机制,实际上通过实现ReportProvider接口来实现。该接口定义了报表文件的基本操作方法,具体如下:

public interface ReportProvider {    InputStream loadReport(String file);    void deleteReport(String file);    List
getReportFiles(); void saveReport(String file, String content); String getName(); boolean disabled(); String getPrefix();}

实现ReportProvider接口后,只需将实现类配置到Spring中,便可使UReport2检测并加载该存储器。

二、自定义MySQL报表存储器

要定义自定义报表存储器,需实现ReportProvider接口,并将实现类配置到Spring中。同时,需设计相应的数据库表结构。以下是一个示例表结构(ID为雪花主键):

sys_ureportfile (    id                 UUID,    reportname         VARCHAR(255),    xmlcontent         BLOB,    gmt_create         DATETIME,    gmt_modified       DATETIME,    primary key (id))

三、代码结构

将UReport2的默认存储器和自定义存储器(如MySQL存储器)放在同一个模块中,形成UReport报表公用模块。

以下是一个实现ReportProvider的MySQL存储器类:

package com.zjm.gwork.ureport.reportProvider.provider;import com.bstek.ureport.provider.report.ReportFile;import com.bstek.ureport.provider.report.ReportProvider;import com.zjm.gwork.ureport.reportProvider.model.SysUreportfile;import com.zjm.gwork.ureport.reportProvider.service.UReportFileService;import com.zjm.gwork.utils.KeyWorker;import lombok.Setter;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;import java.io.ByteArrayInputStream;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.List;import java.util.UUID;@Component("mysql-provider")public class MySQLProvider implements ReportProvider {    private static final String NAME = "mysql-provider";    private String prefix = "mysql:";    private boolean disabled = false;    @Autowired    private UReportFileService uReportFileService;    @Override    public InputStream loadReport(String file) {        SysUreportfile ureportFileEntity = uReportFileService.getReportFileByName(getCorrectName(file));        byte[] content = ureportFileEntity.getXmlcontent();        return new ByteArrayInputStream(content);    }    @Override    public void deleteReport(String file) {        uReportFileService.removeReportFileByName(getCorrectName(file));    }    @Override    public List
getReportFiles() { List
list = uReportFileService.listAllReportFile(); List
reportList = new ArrayList<>(); for (SysUreportfile ureportFileEntity : list) { reportList.add(new ReportFile(ureportFileEntity.getReportname(), ureportFileEntity.getGmtModified())); } return reportList; } @Override public void saveReport(String file, String content) { file = getCorrectName(file); SysUreportfile ureportFileEntity = uReportFileService.getReportFileByName(file); Date currentDate = new Date(); if (ureportFileEntity == null) { ureportFileEntity = new SysUreportfile(); ureportFileEntity.setId(KeyWorker.getInstance().getNextId()); ureportFileEntity.setReportname(file); ureportFileEntity.setXmlcontent(content.getBytes()); ureportFileEntity.setGmtCreate(currentDate); ureportFileEntity.setGmtModified(currentDate); uReportFileService.saveReportFile(ureportFileEntity); } else { ureportFileEntity.setXmlcontent(content.getBytes()); ureportFileEntity.setGmtModified(currentDate); uReportFileService.updateReportFile(ureportFileEntity); } } @Override public String getName() { return NAME; } @Override public boolean disabled() { return disabled; } @Override public String getPrefix() { return prefix; } private String getCorrectName(String name) { if (name.startsWith(prefix)) { name = name.substring(prefix.length(), name.length()); } return name; }}

四、配置说明

要禁用默认报表存储器,可通过配置文件设置ureport.disableFileProvider=true。配置文件内容如下:

ureport.disableHttpSessionReportCache=falseureport.disableFileProvider=trueureport.fileStoreDir=/WEB-INF/ureportfilesureport.debug=true

五、使用说明

  • 实现ReportProvider接口的类需标注@Component,并配置在Spring中。
  • 默认存储器可通过ReportProviderLoader自动发现。
  • 自定义存储器需在配置中指定前缀,例如ureport.mysql.provider.prefix=mysql:
  • 通过以上配置和实现,可以灵活管理UReport2的报表存储机制。

    转载地址:http://qfrpz.baihongyu.com/

    你可能感兴趣的文章
    Openlayers高级交互(9/20):编辑图形(放缩、平移、变形、旋转),停止编辑
    查看>>
    Openlayers:DMS-DD坐标形式互相转换
    查看>>
    openlayers:圆孔相机根据卫星经度、纬度、高度、半径比例推算绘制地面的拍摄的区域
    查看>>
    OpenLDAP(2.4.3x)服务器搭建及配置说明
    查看>>
    OpenLDAP编译安装及配置
    查看>>
    Openmax IL (二)Android多媒体编解码Component
    查看>>
    OpenMCU(一):STM32F407 FreeRTOS移植
    查看>>
    OpenMCU(三):STM32F103 FreeRTOS移植
    查看>>
    OpenMCU(三):STM32F103 FreeRTOS移植
    查看>>
    OpenMCU(二):GD32E23xx FreeRTOS移植
    查看>>
    OpenMCU(五):STM32F103时钟树初始化分析
    查看>>
    OpenMCU(四):STM32F103启动汇编代码分析
    查看>>
    OpenMetadata 命令执行漏洞复现(CVE-2024-28255)
    查看>>
    OpenMMLab | AI玩家已上线!和InternLM解锁“谁是卧底”新玩法
    查看>>
    OpenMMLab | S4模型详解:应对长序列建模的有效方法
    查看>>
    OpenMMLab | 【全网首发】Llama 3 微调项目实践与教程(XTuner 版)
    查看>>
    OpenMMLab | 不是吧?这么好用的开源标注工具,竟然还有人不知道…
    查看>>
    OpenMMLab | 如何解决大模型长距离依赖问题?HiPPO 技术深度解析
    查看>>
    OpenMMLab | 面向多样应用需求,书生·浦语2.5开源超轻量、高性能多种参数版本
    查看>>
    OpenMP 线程互斥锁
    查看>>