java实现报表_修改带 JAVA 自定义类的报表还要重启应用,咋解决?

这是 JAVA 编译型语言特性决定的,修改 JAVA 程序重启应用也正常。只不过改报表就要重启整个应用就有点夸张了,报表变动比较频繁,每次都重启应用会影响业务的。

这个问题的根本原因是耦合性问题,报表里一旦涉及到 JAVA 代码就要跟主应用程序一起打包部署了,也就是耦合在一起,想要修改报表实时生效(热切换)也就不可能了,所以解决这个问题的思路是解耦报表和主应用程序。

一般来说报表中使用 JAVA 编码主要基于以下几种原因:

1、数据计算涉及复杂过程和逻辑控制
为报表准备数据时涉及的计算过于复杂,或者需要做比较复杂的逻辑控制,通过 SQL 不易实现,只能通过 JAVA 硬编码

2、涉及多样性数据源
报表的数据来源多种多样,当涉及 NoSQL、文本、XML、Hadoop、时序数据库、Webservice 等数据源时,报表工具无法实现混合计算,需要用 JAVA 实现报表数据准备

3、方便应用扩展
未来业务增长需要对应用进行水平扩展(拆分),使用 SQL 不利于未来分库,只能用 JAVA 实现报表数据计算

4、用于管理
为了管理需要,有时需要记录报表访问人、报表查询次数、每次查询了哪些数据等信息,通过 JAVA 编写监听类实现

这样看来,要解耦报表模块也不是很容易,最好直接使用具备这些能力的报表工具:
1. 很强的复杂计算能力,能完成较复杂的运算,还容易实现逻辑控制;
2. 多样性数据源支持,最好还能混合计算,如 CSV 和 DB 做 join;
3. 计算不依赖数据库,方便扩展
4. 支持热切换,修改报表不用重启应用

可以看一下 如何降低报表应用的耦合度 ,介绍了如何使用报表工具解耦报表和主应用,画个图感受一下:

0b1bfc3a7cf5ae9061e52228ac9ba3c2.png


原来 JAVA 程序把报表和主应用紧紧绑在一起,现在可以把报表模块单独拆分维护,解释执行可以热切换,修改报表可以不必重启整个应用了。甚至还可以将报表模板单独部署,在物理上实现分离。

工具对复杂计算的支持可以参考 如何应对报表开发中的复杂逻辑
对多样性数据源的支持参考 在报表中直接使用多样性数据源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中newfile是干嘛用的_Python基础介绍 | File I\O 读写文件

如何用Python读写文件呢?我们有许多种办法,包括使用Pandas或者使用os相关的工具,我们来看一下:首先,得明白文件路径的事情:import oscurrent_file os.path.realpath(file_io.ipynb)print(current file: {}…

mysql share mode_mysql锁:mysql lock in share mode 和 select for update

select ... lock in share modeselect ... for update注意点:1.都在事务内起作用;2.所涉及的是行锁(即innodb引擎);3.保证当前session事务所锁定的行不会被其他session所修改(这里的修改指更新或者删除);4.select ... lock in share mode是共享锁&#x…

python是谁维护的_Python是维护拆分的更可靠的方法

cde直接结果一位十进制类最近遇到了一个魔术问题。\\ gt; \\ gt; \\ gt;圆(0.215.2)0.21:00 u t26 t:我想要的结果是0.22,这应该是双重存储的原因。那么如何避免呢?搜索很长一段时间后,将其张贴在此处进行记录。导入小…

idea 用iterm 终端_iTerm2 都不会用,还敢自称老司机?(上)

对于需要长期与终端打交道的工程师来说,拥有一款称手的终端管理器是很有必要的,对于 Windows 用户来说,最好的选择是 Xshell,这个大家都没有异议。但对于 MacOS 用户来说,仍然毋庸置疑,iTerm2 就是你要的利…

bootstrap 日历中文_bootstrap日期选择器本地化-中文

最近用bootstrap做项目,所以就顺便搜了下用bootstrap写的日期选择器。搜到的第一和第二条结果虽然是官网,但上面挂的还是基于bootstrap2的日期选择器(此时为北京时间2017-12-26 17:18),不能与bootstrap3兼容使用。所以又去找bootstrap3的日期…

td之间的间距怎么改_论文的一级标题、二级标题格式怎么弄?

其实论文写好了以后,论文格式的调整也是非常重要的,具体的格式一般有以下几点:标题格式,一级标题、二级标题、三级标题页码格式,一般是正文之前为罗马数字,正文以后为阿拉伯数字,一般是页脚中间…

winform教_电脑绝技教你22天学精Csharp之第十五天winform应用程序补充5

{{1}}$using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.IO;namespace _10打开对话框{publi…

python鼠标事件 详解_Python selenium键盘鼠标事件实现过程详解

引言----在实际的web测试工作中,需要配合键盘按键来操作,webdriver的 keys()类提供键盘上所有按键的操作,还可以模拟组合键Ctrla,Ctrlv等。举例:#cordinggbkimport osimport timefrom selenium import webdriverfrom s…

python中webdriver_Python自动化学习--Webdriver中的常用方法

from selenium import webdriverdriver webdriver.Chrome()driver.get("https://www.baidu.com/")#WebDriver 中常用的一些方法"""(1) clear() 清楚文本 例:driver.find_element_by_id("kw").send_keys("测试学习")d…

mysql 1556_mysql导入时Error Code: 1556 - You can't use locks with log tables.

前几天数据库迁移,导入数据时发现报错,如下:Query:LOCK TABLES general_log WRITEError occured at:2011-07-08 10:22:12Line no.:10268Error Code: 1556 - You cant use locks with log tables.因为某些原因一直没有去解决这个问题,后来数据…

plupload怎么设置属性_腾达无线路由器怎么设置,这些是你要知道的

腾达无线路由器怎么设置1、联好线路:到你家的外网网线接路由器的WAN口,你的电脑连到路由器的LAN口(有四个,任意一个均可),给路由器接通电源。设置的时候,给路由器通电,一根网线直接连电脑和路由器的这个口就…

mysql centos 安装目录在哪_centos中如何查看mysql安装目录在哪

centos中查看mysql安装目录的方法:推荐教程:centos使用教程1、使用ps -ef|grep mysql命令查看:结果:root 17659 1 0 2011 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir/var/lib/mysql --socket/var/lib/mysql/mysql.sock …

mysql group by 规则_mysql 的group by 满足的规则要求:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/u011066470/article/details/97291377————————————————GROUP BY满足的规则:所有sele…

定义加密函数程序python_一个python自定义的加密解密函数

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。编程之家小编现在分享给大家,也给大家做个参考。def encrypt(key,s):b bytearray(str(s).encode("gbk"))n len(b) # 求出 b 的字节数c bytearray(n*2)j 0for i in range(0,n):b1 b[i]b2 b1 ^ k…

dynamic 365 js 失去焦点_基于Auto.js的QQ好友动态秒赞系统

0.脑筋急转弯请问在什么情况下log(10) 10log(20) 20左滑查看答案 console.log(10) 是 10 console.log(20) 是 201.工具选…

scrapy框架_Python:Scrapy框架

“ Scrapy是一个适用爬取网站数据、提取结构性数据的应用程序框架,它可以应用在广泛领域:Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站…

mysql数据库二进制_Mysql数据库简单安装(二进制)

二进制安装:[rootlufengcentos ~]# mkdir /home/lufeng/tools -p[rootlufengcentos ~]# cd /home/lufeng/tools[rootlufengcentos tools]# rz[rootlufengcentos tools]# tar xf mysql-5.5.49-linux2.6-x86_64.tar.gz[rootlufengcentos tools]# mkdir -p /applicatio…

python处理时间和日期_python时间和日期的处理

时间概念时间戳:格林威治时间1970年01月01日00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数元组struct_time:python定义了一个时间类,包含9个属性:属性描述tm_year年tm_mon月,范围1~12tm_mday日&#…

python求两数之和的命令_数学建模:科学计算Python2小时-Python基础

这一部分主要面向数模活动中的python基础知识进行讨论作者系列文章(科学计算Python2小时)目录:李似:科学计算Python2小时-前言与目录​zhuanlan.zhihu.com首先要说明的是,目前常用的Python版本包括Python2和Python3,二者有一些语法…

python源码包安装_源码包安装python2.7.6和ipython1.2.1

1. CentOS 6.X的安装就不多说2.安装包Python2.7.6 和Ipython的下载官网都有,自行下载。注意,不要去卸载系统自带的python程序,在CentOS6.X中python为2.6.X的版本3.解压源码包tar xf Python-2.7.6.tar.xz -C /usr/local/ #解压pythontar xf…