一、spring boot的pom.xml配置URport:
<!-- https://mvnrepository.com/artifact/com.bstek.ureport/ureport2-console -->
<dependency>
<groupId>com.bstek.ureport</groupId>
<artifactId>ureport2-console</artifactId>
<version>2.2.9</version>
</dependency>
二、spring boot 工程启动类中增加以下内容:
// 加载ureport对应的xml配置文件
@ImportResource("classpath:ureport-console-context.xml")
public class GworkApplication{/**
/** ureport2报表Servlet配置*/
@Bean
public ServletRegistrationBean<Servlet> ureport2Servlet(){
return new ServletRegistrationBean<>(new UReportServlet(), "/ureport/*");
}
}
三、spring boot工程原来的就有application.xml中已经配置有数据库配置(没有自己自行提前配置好)后,例如我的产品的数据库用的mysql的相关配置
spring:
#解决前端取回日期少8小时问题
jackson:
time-zone: GMT+8
datasource:
#基本属性
url: jdbc:mysql://localhost:6306/gwork?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2b8
username: root
#password: ENC(scXWqHWXoNVcOUrw/zG40V0iYHp3a7g055555)
password: root
#druid相关配置
druid:
#监控统计拦截的filters
。。。。。。。。。。
四、根据官方文档“报表存储与数据源配置”章节中提到的UReport的报表文件保存在spring boot工程的临时目录下, 我们需要更改报表的存储目录(这个为了以后维护用,最终整合到实际工程中),则需要从UReport2下载的核下包(用压缩工具)提取出
ureport.properties 把此文件放到spring boot工程resources目录,同时修改它ureport.fileStoreDir属性内容,如下:
ureport.properties文件的内容:
ureport.disableHttpSessionReportCache=false
ureport.disableFileProvider=false
ureport.fileStoreDir=D:/ureportfiles
ureport.debug=true
五、启动spring boot项目工程后,在非ie浏览器输入以下,将出来设计器:
http://localhost:7001/ureport/designer
六、真正的设计报表或者后面在项目中使用这个报表模板时,都希望用我们spring boot自己的数据库相关的配置信息,ureport提供的报表模板的三个数据库源,分别是:
(一)直接连接数据库: 这个练习可以,真正在项目中不会这样用,因为它是把数据库的配置信息写入到每个报表模板文件中,无法动态取得数据源。
(二)Spring bean数据源:这个在项目实践中最常用之一,数据来源来Bean中定义的List,这个Bean的定义规范可以看官方手册,例如:
在Spring bean数据集配置中,方法名我们可以点击右侧的“选择方法”按钮来选择当前Bean对应的类中定义的方法,但这里对方法的要求是:方法必须要有三个参数,依次是String,String,Map,比如我们上面定义的testBean里就包含两个合法的方法,如下所示:
Bean数据集方法示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
所以对于一个合法的Bean数据集方法要有三个参数,分别是String,String,Map,依次对应数据源名称、数据集名称以及外部传入的参数Map,Bean的方法只有是这种结构才可以选择。对于数据集方法的返回值,目前来说可以支持两种类型,一种是我们TestBean中返回的Map<String,Object>类型的List集合;另一种就是返回一个POJO类型的List集合,比如像下面的方法:
返回POJO类型集合的方法示例
1 2 3 |
|
在上面的示例方法中,返回的就是User对象集合,这里的User对象,就是一个普通的POJO对象。
(三)内置数据源:这个在项目实践中最常用之二,实现UReport本身提供的BuildinDatasource 接口,它的接口信息如下:
我们只需写一个实现类,就可以让报表模板用我们自己内部源(即spring boot工程中配置的数据库相关的数据源),例如:
package com.zjm.gwork.utils;
import com.bstek.ureport.definition.datasource.BuildinDatasource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
/**
* @ClassName: UreportDataSource
* @Description: //todo
* 1.
* 2.
* @Author: zhongzk 28582157@qq.com
* @Date: 2021/1/30 5:37 *
* @Copyright: 字节码团队www.bjsurong.com. All rights reserved. *
*/
@Component
public class UreportDataSource implements BuildinDatasource {
private Logger log = LoggerFactory.getLogger(UreportDataSource.class);
private static final String NAME = "gwork"; // gwork这个名字不是数据库名称的意思,而是给这个datasource命一个别名(你可以固定叫XXX项目名称-datasource,最终用的是spring boot配的真实datasource.
@Autowired
private DataSource dataSource;
/**
* 数据源名称
*/
@Override
public String name() {
return NAME;
}
/**
* 获取连接
*/
@Override
public Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
log.error("Ureport数据源,获取连接失败!");
e.printStackTrace();
}
return null;
}
}
最终我们的设计报表时,选择内置数据源即可,BuildinDatasource接口实现类配置到Spring中后,UReport2会自动检测到,这样在报表设计器中,点击数据源页签中的按钮,在弹出的窗口中就可以选择定义好的内置数据源,如下图所示:
步骤一:
步骤二: