缓存

缓存是解决性能问题,避免重复计算的利器,润乾报表中也提供了缓存功能。

使用在如下几个场景中:

1.单用户缓存

一个用户访问报表后,把结果缓存,后续的打印,导出则不再需要重新计算了。

2.多用户缓存

多个用户访问相同的报表(如果有参数需要参数也相同),则计算一次就可以,不需要每个用户计算一次,当然,所有用户的打印导出也不用重新计算了。

3.集群同步

报表应用部署到集群后,也可以像前两条一样享受缓存。

上述三个场景如其文件类型为 file具体的配置方法如下:

在 raqsoftConfig.xml 中,做如下属性设置:

其中:

缓存系统总入口:

通过 alwaysReloadDefine 属性控制。值为 no 时,表示开启报表缓存机制,之后计算时,在指定的缓存时间内,报表模板文件仅加载一次,报表仅运算一次。其它操作都从缓存中提取,如翻页等等。

缓存的文件目录:

通过 cachedReportDir 属性控制。

** 注:** 用户应对此文件夹有写的权限,并根据报表的数量和访问量的大小以及缓存超时的时间,分配一个合理的空间大小。如果用户没有写的权限或不设此参数或设置错误,则采用 JDK 默认的临时文件夹 (JVM 属性 java.io.tmpdir 的值)。

缓存时间:

通过 cachedReportTimeout 属性来控制,以分钟为单位。如果不设此参数,缺省值是 120 分。

建议:此值应根据实际内存大小、缓存文件夹空间大小来调节,一般在 1-3 小时之间。

报表缓存文件前缀:

通过 cachedIdPrefix 属性控制。

:只有在集群环境中并且多台服务器共享一个报表缓存目录时才需要设置,前缀可以任意指定,集群时不同机器用不同的前缀。

另外,如果文件类型用的是defineBean方式,则 alwaysReloadDefine 设置失效,系统会启动缓存机制,如果不需要缓存,建议通过一个动态变化的值来命名 beanName 属性,当然在 request 中保存的对象名与之一一对应。

举例:

首次访问 beanname 为 a,对应报表计算结果对象是 a-1,以后再访问 beanname=a 就会直接取得 a-1。当访问时更换 beanname 为 b,去取它对应的计算结果对象的时候就跟 a-1 没关系了。

注:计算结果对象由缓存管理器管理默认当服务器关闭时,计算结果对象才会被清除。