报表缓存的配置
在并发访问的机制下,经常出现同一报表被连续多次重复访问的情况,此时如果能够把第一次算出的报表缓存下来,再次访问时直接从缓存中读取,则可以大大减少服务器的运算消耗。 对于带有参数和宏的报表,当用户采用相同的参数和宏进行重复访问时,也可以利用缓存,减少重复计算。
润乾报表提供的缓存机制,既考虑了参数和宏对报表的影响,还考虑了运算前的报表、运算后的报表及分页后的报表,从模板缓存、结果缓存、分页缓存三个层面对报表进行了缓存控制,可以说是全方位的控制,非常的周到、详尽。具体说来,在WEB-INF/reportConfig.xml文件中提供了有关报表缓存的配置。
alwaysReloadDefine 是否每次都重新读取报表定义,如设为yes,则不能享受性能管理提供的缓存功能,可以在应用开发测试阶段设为yes,以免报表定义改动以后,网页访问报表不能及时刷新但应用正式上线以后,应将其设为no。此时如果修改了报表定义,应访问refreshReport.jsp来刷新相应的报表定义及其缓存。
cachedParamsTimeout 表示提交给报表的参数在缓存中保存的时间,以分钟为单位。如果不设此参数,缺省值是120分。
cachedReportDir 表示报表缓存的文件夹,(在unix系统中,用户应对此文件夹有写的权限,并根据报表的数量和访问量的大小以及缓存超时的时间,分配一个合理的空间大小)。如果不设此参数或设置错误,则采用JDK默认的临时文件夹。
cachedIdPrefix 表示报表缓存的前缀。只有在集群环境中并且多台服务器共享一个报表缓存目录时才需要设置。
cachedReportTimeout 表示报表缓存保存的时间,以分钟为单位。如果不设此参数,缺省值是120分。此值应根据实际内存大小、缓存文件夹空间大小来调节,一般在1-3小时之间。
在实际应用中,配置报表缓存时有如下几种方法:
- 如果发布的报表类型是file,那么只要设置alwaysReloadDefine为no,就开启了报表缓存机制,它在计算时,在指定的时间内,报表定义文件仅加载一次,报表仅运算一次.其它操作都从缓存中提取,如翻页等等。
- 如果发布的文件类型是defineBean,那么,alwaysReloadDefine将失效,系统会自动启动缓存机制,如果不需要缓存,建议通过一个动态变化的值来命名beanName属性,当然在request中保存的对象名与之一一对应。
- 除了使用alwaysReloadDefine为系统设置是否启用缓存,还可以通过tag标签的useCache与timeout两个属性来控制具体的每一个报表是否使用缓存,当设置useCache为yes,timeout为30时,系统在运算过程中将,将启动缓存,并且每次计算仅取30秒以内生成的有效报表,如果没有在此时间内的,则产生一个新报表。
注意事项:
当我们通过参数表单或者其它方式给报表传参时,报表会将我们传递的所有参数封装到reportParamsId,然后将reportParamsId置于参数缓冲池中,这样我们每次刷新页面时,报表根据相应的reportParamsId从参数缓冲池中获取相应的参数然后进行报表的计算。但是,设置cachedParamsTimeout参数缓存时间有时会不起作用。
有时候我们设置了参数在缓冲池的时间即cachedParamsTimeout为3分钟,但是等到设置的时间临界值时我们重新刷新报表时,报表仍可以进行计算,即之前输入的参数仍然保存在缓存中。
原因分析
因为缓冲池中的参数清除是由进程单独控制的,当发现参数超过预设时间时立即清除参数缓冲中的参数,但是该进程是每5分钟被执行一次,也就是说如果设置了cachedParamsTimeout为3分钟,而报表参数添加到参数缓冲池的时候该进程刚刚被执行,则直到8分钟之后刷新页面进行报表计算时才会报错提示:”参数已经清除或者超时,请重新输入参数!”。
解决办法
可以在条件允许的情况下尽量大的设置cachedParamsTimeout的值,以免小于参数清除进程的执行间隔时间。
下面介绍几种性能管理的推荐配置:
- 对于访问量高的配置方案,建议cachedReportTimeout设置成60分钟,访问量高的情况下,减少报表缓存时间。alwaysReloadDefine设置为no,开启缓存,这样客户在翻页时,不再与数据库交互,减轻数据库服务器的负担。同时在tag标签中把useCache设置为yes,而timeout可以根据自己的实时要求进行设置,如果数据一直都不会变的话,建议设置为-1。
- 对于数据量大的配置方案,建议cachedReportTimeout设置成180分钟,用户数据量大的情况下,增大报表缓存时间。alwaysReloadDefine设置为no,开启缓存,这样客户在翻页时,不再与数据库交互,减轻数据库服务器的负担。同时在tag标签中把useCache设置为yes,而timeout可以根据自己的实时要求进行设置,如果数据一天都不会变的话,建议设置为-1。
- 在开发模式下,我们可能时不时的修改报表,并且想在不重启web服务器的情况下,就在页面上看到修改效果,这时我们可以设置alwaysReloadDefine为yes
引自:润乾报表知识库
相关文章:一种实现类似excel把负数显示成红色且去掉负号的方法 ; 导入带公式excel的问题 ;web报表的扩展功能;润乾报表出了新版统计图 ;解决行式填报导入excel发生错位的问题