跳至主要內容

SSM项目整合Ureport报表设计器

holic-x...大约 8 分钟项目项目

SSM项目整合Ureport报表设计器

1.业务场景

​ <1>在现有工程基础上引入Ureport2报表设计器 Ureport报表设计器是一个基于WEB的在线报表设计器,其具有良好的界面设计和强大的报表设计功能,支持报表多种格式导出(分页)、报表通用性设计等,Ureport2支持简单、复杂报表的设计,能够很好地嵌合实际业务需求,其报表设计可通过纯sql或者是配置的方式实现,以此可针对不同的人员进行管理。

​ <2>针对多租户、复杂报表设计 ​ Ureport2可在工程中自定义报表存储器和数据源,在代码逻辑层模拟实现多租户概念(不同的租户访问不同的报表存储器、数据源信息)

​ <3>现存问题

​ a.学习成本

​ 将UReport报表设计器整合到已有项目并非一件难事,只需要通过简单的配置便可完成,主要的工作量在于后期报表的设计、维护,以及UReport2报表设计器的学习需要耗费一定的时间和精力,需要开发人员了解报表设计的流程、原理,掌握排查报表设计错误的方法,熟练应用。

​ b.与实际业务整合

​ 针对存量报表子站中的报表整改,如果所有的报表都要重新进行设计、维护,将是一个巨大的工作量。

​ UReport2仅仅是一个报表设计器,如果要结合需求实现多租户概念,相应需要额外对应的维护页面与接口设计

​ 针对大数据量数据处理还存在一定的问题,其中涉及缓存概念,有时候处理特大数据量的时候后台报错,考虑需要深入UReport源码分析或者是相关配置调整;且其提供的图形统计图显示相对EChart而言并不太友好。

​ 由于只是在毕设中应用到该插件,加上毕设时间限制没有做过多的深入,只是做了简单应用,但从这段时间的学习来看Ureport是比较方便且功能强大的开源插件,其与实际业务的整合、数据的处理还需要时间的验证,毕竟还需要考虑额外诸多因素,在后续的学习中会考虑进一步完善

​ 下述本人在项目开发中使用Ureport的一些学习笔记参考,更多扩展学习可参考ureport学习网站open in new window

2.SSM整合Ureport报表设计器

SSM项目整合Ureport步骤

1.新建maven项目,导入ureport2相关依赖和所要应用的数据库驱动包
2.在spring配置文件中导入ureport2配置文件
3.在web.xml配置spring、ureport的servlet拦截过滤

<1>整合参考

​ 在现有SSM项目上整合ureport组件(针对多模块或者多个子系统的场景,可以将报表相关功能单独抽离成一个子系统,封装处理并对外发布报表相关服务)

pom.xml中引入相关依赖

<dependency>
    <groupId>com.bstek.ureport</groupId>
    <artifactId>ureport2-console</artifactId>
    <version>[version]</version>
</dependency>

web.xml中配置ureport的servlet配置

<servlet>
    <servlet-name>ureportServlet</servlet-name>
    <servlet-class>com.bstek.ureport.console.UReportServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ureportServlet</servlet-name>
    <url-pattern>/ureport/*</url-pattern>
</servlet-mapping>

引入ureport相关的配置文件

三种方式引入:web.xml中加载、在已有spring配置文件中整合、构建自定义context.xml引入

  • 方式1:直接在web.xml中加载ureport-console-context.xml文件(针对普通的Maven工程配置,没有采用spring文件配置的情况)
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:ureport-console-context.xml</param-value>
</context-param>
  • 方式2:在已有的spring配置文件中导入数据
<import resource="classpath:ureport-console-context.xml" />
  • 方式3:如果没有spring配置文件,可自行构建一个context.xml引入
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
    ">
<import resource="classpath:ureport-console-context.xml" /></beans>

<2>SSM整合说明

此处针对已有的SSM项目整合做说明:

​ 无论是以上哪种方式实现,必须保证在web.xml需要加载相应的spring配置文件,否则项目在启动的时候就会报视图解析失败,没有相应的designer

​ 在整合启动的过程中可能由于maven相关jar包没有正常导入,导致ureport依赖的相关jar包非正常导入,项目启动报错(删除maven仓库的内容,重新导入jar包)

以下简单对整合过程中可能遇到的问题做简单的说明

问题1:指定属性无法找到(是由于在整合的过程中Ureport报表设计器需要指定的属性并没有在自己搭建的工程中指定,因而报错)

​ 启动的时候如果报找不到指定的属性:则需要在属性配置的时候需要不存在(未配置)的属性(在applicationContext-dao.xml、springmvc.xml下加载了属性文件,添加属性忽略掉没有定义的属性查找),报错内容如下所示

​ 解决方案:针对SSM整合项目、Maven普通工程处理方式不同,主要目的是将ureport所需的参数配置装载到项目中

  • 针对spring配置文件处理:
<context:property-placeholder location="classpath:config/*.properties" ignore-unresolvable="true" order="1"/>
  • 针对普通maven工程处理:

​ 关于properties配置文件的加载,一般是直接配置<context:property-placeholder location="classpath:config/*.properties" />,但是如果启动应用过程中系统报各种属性找不到异常则需要相应在此基础上添加ignore-unresolvable="true" order="1",其中ignore-unresolvable="true"属性表示忽略当前配置的文件中没有配置的属性,而order属性则表示加载优先级(值越小、优先级越高)。如果项目中的properties文件加载是通过PropertyPlaceholderConfigurer为bean的方式加载,其配置参考如下

<property name="ignoreUnresolvablePlaceholders" value="true"></property>
<property name="order" value="1"></property>

​ 配置属性说明:Ureport有自定义的配置属性,这些配置属性是与报表存储、设计相关的,具体内容需要根据实际的业务需求去自行配置,如果不需要则在代码逻辑层对业务流转进行控制即可

问题2:404或指定designer设计器不存在

​ 在整合的ssm中配置ureport出错,通过链接访问数据的时候无法找到指定的页面,初步考虑路径配置,之后查看web.xml配置,发现在之前的前端控制器配置中,默认拦截了所有的请求,因此在请求的时候直接被dada-report这个前端控制器拦截,但dada-report这个控制器下并没有指定的ureport相关的内容存在,因此会报404访问路径错误或者是designer报表设计器不存在的问题,此处需要对dada-report拦截的内容做限制,参考前端控制器拦截(拦截说明、拦截顺序、执行顺序)

​ 直接配置如下所示,但如果出现designer视图不存在,考虑是相应的文件没有加载进去,如果是在springmvc.xml中加载了有关的ureport2配置文件,则要在初始化加载spring容器的时候将对应的springmvc.xml配置文件进行加载,否则无法找到相应内容,提示【Handler[/designer] not exist】(或者设定Servlet默认启动的时候加载配置文件)

​ 依赖配置:添加ureport相关的依赖jar包。为了避免配置文件混乱,也避免改动原有ssm配置,此处单独在resources目录下创建一个文件夹ureport存放ureport-custom-context.xml配置文件以编辑相关的ureport配置,并在web.xml中配置相应的全局参数(必须在context-param中配置加载文件

​ 配置完成,启动项目,访问链接:http://localhost:8084/ureport/designer,访问Ureport报表设计器随后进行报表设计和测试

<3>通用报表设计整合

​ 无论是机构、还是平台报表存储器,此处操作的表字段都是统一的,因此此处做一个调整,设置通用的方法将重复的内容统一起来,用不同的字段标识进行划分,由前台页面传入数据限定相应的标准,不需要重复操作代码

a.创建指定数据表结构(字段需保持一致)

存储报表文件、数据源配置文件(概念上区分,实际内容基本一致)

机构相关存储器:ureport_file、ureport_data_source_file、

平台公共存储器:ureport_backup、ureport_data_source_backup

保持数据字段相应一致,主要包括file_id(主键)、file_name(文件名称)、file_content(文件内容)三个基本字段,具体其余字段的设计则根据实际工程需求进行扩展。

b.创建通用的实体类UreportFileManager

​ UreportFileManager类作为通用的实体类,使得在dao层只需要指定需要操作的表名tableName便可实现对不同的数据表进行操作,UreportFileManager基本结构定义需要与相应数据表的属性一一对应。

3.

4.

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3