Jasper 怎麼配置動態資料來源

xiaohuihui發表於2020-05-22

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 一句話搞定

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

其中,“connect(dataSource)”為獲取資料庫連線,“dataSource”為集算器引數,傳入哪年就可以獲取對應資料庫連線。

上面的場景還只是最簡單的取數需求,如果涉及到多資料來源的混合運算,對於 Jasper 來說就更困難了,甚至沒解決方案。這些問題引入集算器都會變的輕鬆,感興趣的可以參考: 。

集算器提供了 JDBC 驅動,可以很方便的與 Jasper 等報表工具整合,詳細用法可參考 。

關於集算器安裝使用、獲得免費授權和相關技術資料,可以參見 。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2693625/,如需轉載,請註明出處,否則將追究法律責任。

相關文章