Jasper 怎么配置动态数据源

Jasper 本身是不支持动态数据源的,能用的解决方式是通过 api 自定义数据源,实际操作就是根据条件判断后动态设定 jdbc 的 url、用户名及密码等连接属性。比如:

 String userName = userDetails.getUsername();
 // obtain a connection based on the username.
 String dataSourceURI = "";
 if (userName.equalsIgnoreCase("admin")) {
 dataSourceURI = "/datasources/ds_1";
 userName = "xx";
 …
 }else if{…}
 connection = getRepositoryDatasource(dataSourceURI);
 try {
 parameterValues.put(JRParameter.REPORT_CONNECTION,
 connection.getDataSource().getConnection());
 } catch (SQLException sqle){
 sqle.printStackTrace();
 }

API 尽管做到了动态数据源, 但过程还是比较复杂的,另外还会导致自定义类与应用间高耦合,后期维护也是挺麻烦的事儿。

如果有集算器,这个问题就很容易处理,比如某业务量较大的企业把每年的数据都分库存放在独立服务器。当按年度查询数据(如订单表)的时候,就要动态的去连对应库。

集算器 SPL 一句话搞定

 ABC
1=connect(dataSource)/get dataSource connect 
2=A1.query(“select * from orders”)/Execution query 

其中,“connect(dataSource)”为获取数据库连接,“dataSource”为集算器参数,传入哪年就可以获取对应数据库连接。

上面的场景还只是最简单的取数需求,如果涉及到多数据源的混合运算,对于 Jasper 来说就更困难了,甚至没解决方案。这些问题引入集算器都会变的轻松,感兴趣的可以参考:分库后的统计查询

集算器提供了 JDBC 驱动,可以很方便的与 Jasper 等报表工具集成,详细用法可参考JasperReport 调用 SPL 脚本

关于集算器安装使用、获得免费授权和相关技术资料,可以参见如何使用集算器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值