JasperServer能否像参数一样动态选择报表DataSource
这个需求完全可实现,不需要维护多份报表,通过参数化绑定数据源的方式即可完成,具体操作步骤如下:
前置准备
先将你需要用到的2个数据源都提前在JasperServer中注册为可用资源,支持两种类型:
- 托管JDBC数据源:直接在JasperServer控制台上传JDBC驱动、填写连接信息创建的数据源
- JNDI数据源:在你部署JasperServer的应用服务器(如Tomcat)中配置的JNDI数据源
确保报表所在目录的访问角色,拥有这两个数据源的访问权限。
操作步骤
1. 调整JRXML报表模板配置
打开你用Jaspersoft Studio编辑的报表模板,新增一个字符串类型的参数:
- 参数名:
$P{DATA_SOURCE_SELECT}(可自定义) - 不要设置默认值,标记为必填参数
- 可选值列表填写你两个数据源的唯一标识:如果用托管JDBC数据源就填数据源在JasperServer中的资源路径(比如
/datasources/db1、/datasources/db2);如果用JNDI数据源就填对应的JNDI名称
2. 在JasperServer中配置报表输入控件
上传修改后的JRXML到JasperServer,进入报表的「编辑」页面,找到「输入控件」配置项:
- 给
$P{DATA_SOURCE_SELECT}参数添加一个单选下拉输入控件,可选值和你在模板中配置的一致,显示名称可以改成「选择数据源」方便用户理解 - 保存输入控件配置
3. 绑定动态数据源
回到报表的「数据源」配置页,根据你用的数据源类型选择对应配置:
- 若用托管JDBC数据源:选择「通过表达式指定数据源」,表达式填写
repo:$P{DATA_SOURCE_SELECT} - 若用JNDI数据源:选择「JNDI数据源」,JNDI名称字段直接填写
$P{DATA_SOURCE_SELECT}
保存报表配置后生效,用户打开报表时就会先弹出数据源选择框,选中后报表就会用对应的数据源执行查询。
注意事项
- 两个数据源的表结构、查询用到的字段名必须完全一致,否则会出现字段找不到的报错,如果有小差异可以在报表查询SQL中用条件判断做兼容
- 如果需要在本地Jaspersoft Studio中调试,给
$P{DATA_SOURCE_SELECT}参数设置对应本地数据源的默认值即可
内容的提问来源于stack exchange,提问作者Ricardo Pinheiro
相关产品推荐
相关产品推荐

