本节将重点介绍web.xml、raqsoftConfig.xml、reportCenter.xml三个配置文件的参数说明,报表缓存配置,并发数控制,性能管理的推荐配置。详细内容介绍请参考具体小节。
在web.xml文件中要对报表系统中用到的servlet和taglib进行配置,请将报表系统提供的web.xml文件中的<web-app>节点下的所有内容复制到你的应用的web.xml文件中相应的位置。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<listener>
<listener-class>com.raqsoft.center.listener.UserSessionListener</listener-class>
</listener>
<listener>
<listener-class>com.raqsoft.guide.web.GuideSessionListener</listener-class>
</listener>
<!-- 报表中心手机登录状态过滤器 -->
<filter>
<filter-name>mobileLoginFilter</filter-name>
<filter-class>com.raqsoft.center.console.mobile.MobileLoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>mobileLoginFilter</filter-name>
<url-pattern>/raqsoft/center/mobile/jsp/*</url-pattern>
</filter-mapping>
<!-- 报表中心浏览器版登录状态过滤器 -->
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.raqsoft.center.console.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/raqsoft/center/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/reportCenterServlet</url-pattern>
</filter-mapping>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.raqsoft.report.webutil.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 集算器dql -->
<servlet>
<servlet-name>DqlServlet</servlet-name>
<servlet-class>com.scudata.web.dql.esprocdql.DqlServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>DLServlet</servlet-name>
<servlet-class>com.raqsoft.guide.web.dl.DLServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>dataSphereServlet</servlet-name>
<servlet-class>com.raqsoft.guide.web.DataSphereServlet</servlet-class>
<init-param>
<param-name>configFile</param-name>
<param-value>guideConf.properties</param-value>
</init-param>
<init-param>
<param-name>root-path</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- 访问路径均为: http://127.0.0.1:端口号/项目名称/reportCenter -->
<!-- 报表中心servlet定义 -->
<servlet>
<servlet-name>reportCenterServlet</servlet-name>
<servlet-class>com.raqsoft.center.console.ReportCenterServlet</servlet-class>
</servlet>
<!-- 报表中心上传servlet定义 -->
<servlet>
<servlet-name>centerUpload</servlet-name>
<servlet-class>com.raqsoft.center.console.file.UploadFilesServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>reportServlet</servlet-name>
<servlet-class>com.raqsoft.report.view.ReportServlet</servlet-class>
<init-param>
<param-name>configFile</param-name>
<param-value>/WEB-INF/raqsoftConfig.xml</param-value>
</init-param>
<init-param>
<param-name>headless</param-name>
<param-value>none</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>setContext</servlet-name>
<servlet-class>com.raqsoft.report.webutil.setContextServlet</servlet-class>
<load-on-startup>4</load-on-startup>
</servlet>
<servlet>
<servlet-name>com.raqsoft.report.usermodel.PrintSetupServlet</servlet-name>
<servlet-class>com.raqsoft.report.usermodel.PrintSetupServlet</servlet-class>
<init-param>
<param-name>saveDisplayScale</param-name>
<param-value>yes</param-value>
</init-param>
</servlet>
<!-- 保存客户端打印设置,可以修改这个参数值 -->
<servlet>
<servlet-name>com.raqsoft.report.view.PagedPrint</servlet-name>
<servlet-class>com.raqsoft.report.view.PagedPrint</servlet-class>
</servlet>
<servlet>
<servlet-name>InputServlet</servlet-name>
<servlet-class>com.raqsoft.input.view.InputServlet</servlet-class>
<!--填报集群设置-->
<init-param>
<param-name>configFile</param-name>
<param-value>/WEB-INF/raqsoftConfig.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>CenterInitServlet</servlet-name>
<servlet-class>com.raqsoft.center.CenterInitServlet</servlet-class>
<init-param>
<param-name>configFile</param-name>
<param-value>/WEB-INF/reportCenter.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>weixinLogin</servlet-name>
<servlet-class>com.raqsoft.weixin.WeixinLoginServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/weixin.properties</param-value>
</init-param>
<load-on-startup>10</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>weixinLogin</servlet-name>
<url-pattern>/wxlogin</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>weixinLogin</servlet-name>
<url-pattern>/raqsoft/center/wxlogin</url-pattern>
</servlet-mapping>
<!--远程服务-->
<servlet>
<servlet-name>ReportCenterServletIde</servlet-name>
<servlet-class>com.raqsoft.center.console.ide.ReportCenterServlet</servlet-class>
<init-param>
<param-name>configFile</param-name>
<param-value>/WEB-INF/raqsoftConfig.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ReportCenterServletIde</servlet-name>
<url-pattern>/reportCenterServlet/ide</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>InputServlet</servlet-name>
<url-pattern>/InputServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>com.raqsoft.report.usermodel.PrintSetupServlet</servlet-name>
<url-pattern>/servlet/PrintSetupServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dataSphereServlet</servlet-name>
<url-pattern>/servlet/dataSphereServlet</url-pattern>
</servlet-mapping>
<!-- 报表中心上传servlet的url映射路径 -->
<servlet-mapping>
<servlet-name>centerUpload</servlet-name>
<url-pattern>/reportCenterServlet/upload</url-pattern>
</servlet-mapping>
<!-- 报表中心servlet的url映射路径 -->
<servlet-mapping>
<servlet-name>reportCenterServlet</servlet-name>
<url-pattern>/reportCenterServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>reportCenterServlet</servlet-name>
<url-pattern>/raqsoft/center/mobile/jsp/reportCenterServlet</url-pattern>
</servlet-mapping>
<!--集算器dql的servlet的url映射路径-->
<servlet-mapping>
<servlet-name>DqlServlet</servlet-name>
<url-pattern>/DqlServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>DqlServlet</servlet-name>
<url-pattern>/DqlServletAjax</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>DLServlet</servlet-name>
<url-pattern>/DLServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>DLServlet</servlet-name>
<url-pattern>/DLServletAjax</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>reportServlet</servlet-name>
<url-pattern>/reportServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>com.raqsoft.report.view.PagedPrint</servlet-name>
<url-pattern>/servlet/pagedPrintServer</url-pattern>
</servlet-mapping>
<taglib>
<taglib-uri>/WEB-INF/raqsoftReport.tld</taglib-uri>
<taglib-location>/WEB-INF/raqsoftReport.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/raqsoftInput.tld</taglib-uri>
<taglib-location>/WEB-INF/raqsoftInput.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/raqsoftQuery.tld</taglib-uri>
<taglib-location>/WEB-INF/raqsoftQuery.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/raqsoftAnalyse.tld</taglib-uri>
<taglib-location>/WEB-INF/raqsoftAnalyse.tld</taglib-location>
</taglib>
<listener>
<listener-class>com.raqsoft.input.view.InputSessionListener</listener-class>
</listener>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
</web-app>
说明:
1.headless属性值为none时表示不设置headless,缺省headless属性值为true。
2.打印大数据量时,蓝色部分为必须配置,一般情况下,可配可不配。但只要配置了<servlet></servlet>就必须配<servlet-mapping></servlet-mapping>。
关于润乾报表的参数设置,请打开文件(WEB-INF\raqsoftConfig.xml)。内容如下:
<!--注意:为避免程序使用异常,raqsoftConfig.xml文件的编码格式必须设置为UTF-8 -->
<?xml version="1.0" encoding="UTF-8"?>
<Config Version="1">
<Runtime >
<!—数据源中用户密码的加密级别:0表示明文,1表示密码加密,2表示URL、用户名和密码加密-->
<DBList encryptLevel="0">
//报表应用demo数据源
<!--数据库类型编号,编号依次代表的数据库类型为:[UNKNOWN:0; ORACLE:1; SQLSVR:2; SYBASE:3; SQLANY:4; INFMIX:5; FOXPRO:6; ACCESS:7; FOXBAS:8; DB2:9; MYSQL:10; KINGBASE:11; DERBY:12; HSQL:13; TERADATA:14; POSTGRES:15; DATALOGIC:16; IMPALA:17; ESSBASE:101;] -->
<DB name="reportdemo">
<!--由于xml文件中不允许出现&等特殊字符,因此如果url的value值中需包含&等特殊字符时,则需先将特殊符号进行转义,如先将&写成"&",再写入文件中-->
<property name="url" value="jdbc:hsqldb:hsql://127.0.0.1/reportdemo" />
<property name="driver" value="org.hsqldb.jdbcDriver" />
<property name="type" value="13" />
<property name="user" value="sa" />
<property name="password" />
<property name="batchSize" value="1000" />
<!--是否自动连接。如果设定为true,则可以直接使用db.query()函数来访问数据库;如果为false,则不会自动连接,使用前必须用connect(db)语句连接-->
<property name="autoConnect" value="false" />
<!--数据库是否用模式名,例如:如果设置为true ,则在自动生成的sql语句中,会是select tbl.col1,tbl.col2 from tbl这样的语法,否则就是select col1,col2 from tbl -->
<property name="useSchema" value="false" />
<property name="addTilde" value="false" />
<!-- SQL语句大小写是否敏感-->
<property name="caseSentence" value="false" />
</DB>
//查询和分析功能中报表DQL Server服务所需要的物理数据库demo数据源
<DB name="dqldemo">
<property name="url" value="jdbc:hsqldb:hsql://127.0.0.1/dqldemo" />
<property name="driver" value="org.hsqldb.jdbcDriver" />
<property name="type" value="13" />
<property name="user" value="sa" />
<property name="password" />
<property name="batchSize" value="1000" />
<property name="autoConnect" value="false" />
<property name="useSchema" value="false" />
<property name="addTilde" value="false" />
<property name="caseSentence" value="false" />
</DB>
//配置查询和分析功能中所使用的报表DQL Server服务
<DB name="DataLogic">
<property name="url" value="jdbc:datalogic://127.0.0.1:3366/datalogic" />
<property name="driver" value="com.datalogic.jdbc.LogicDriver" />
<property name="type" value="16" />
<property name="user" value="root" />
<property name="password" value="root" />
<property name="batchSize" value="1000" />
<property name="autoConnect" value="false" />
<property name="useSchema" value="false" />
<property name="addTilde" value="false" />
<property name="caseSentence" value="false" />
</DB>
</DBList>
<!--路径设置需注意以下说明:
1,使用相对路径时,路径前不需要加反斜杠“/”;
2,绝对路径前需要带盘符或者反斜杠“/”。带反斜杠“/”时为绝对路径,表示拼接上当前盘的根目录,例如该程序的根目录在D盘,那么/reportFiles即表示D:/reportFiles。-->
//集算器选项配置
<Esproc>
<charSet>GBK</charSet>
<!--配置spl文件寻址路径,可为相对路径,相对路径前面不需要加反斜杠”/”-->
<splPathList>
<splPath>WEB-INF/reportFiles</splPath>
</splPathList>
<dateFormat>yyyy-MM-dd</dateFormat>
<timeFormat>HH:mm:ss</timeFormat>
<dateTimeFormat>yyyy-MM-dd HH:mm:ss</dateTimeFormat>
<!--配置esProc主目录,主目录必须为绝对路径。主目录为空时则相对于web应用根目录-->
<mainPath />
<tempPath />
<bufSize>65536</bufSize>
<parallelNum>1</parallelNum>
<!—二进制文件区块大小 -->
<simpleTableBlockSize></simpleTableBlockSize>
<!--文本类型数据中,代表空值的字符串 -->
<nullStrings>nan,null,n/a</nullStrings>
<fetchCount></fetchCount>
<extLibsPath></extLibsPath>
</Esproc>
//报表选项配置
<Report>
<!--设置报表授权,可为相对路径,相对路径前面不需要加反斜杠”/”-->
<license> </license>
<!--编辑好的报表文件在应用中存放的位置,其值可相对于web应用根目录;也可是绝对路径,分隔符用“/”表示,如d:/myReport/web/webapps/demo/ WEB-INF/reportFiles;还可以是类路径。需要从类路径下查找报表文件时,可以将reportFiles目录放到WEB-INF/classes下,或者把reportFiles目录打成jar包(jar里不能有中文否则tomcat启动不了)放到lib下,然后将home直接配置成reportFiles。-->
<home>WEB-INF/reportFiles</home>
<!—设置报表样式文件,可为相对路径,相对路径时相对于应用根目录-->
<styleConfig>tmp/reportStyleConfig.xml</styleConfig>
<!--当SQL查询语句存在错误时,是否在web页面显示SQL语句。适用于数据集:SQL检索/存储过程-->
<showSQL>true<showSQL>
</Report>
//填报表选项配置
<Input>
<!--表示编辑好的填报表文件在应用中存放的位置,其值可相对于web应用根目录;也可是绝对路径,分隔符用“/”表示,如D:/myReport/web/webapps/demo/ WEB-INF/reportFiles ,相对路径前面不需要加反斜杠”/” ;还可以是类路径。需要从类路径下查找报表文件时,可以将reportFiles目录放到WEB-INF/classes下-->
<home>WEB-INF/reportFiles</home>
</Input>
</Runtime>
<Server>
<!-- 设置JNDI数据源
<JNDIList>
//指定与报表中所使用数据源名称一致的JNDI数据源名称
<JNDI name="jdbc/test">
//数据库类型编号,0-14依次代表的数据库类型为:[UNKNOWN:0; ORACLE:1; SQLSVR:2; SYBASE:3; SQLANY:4; INFMIX:5; FOXPRO:6; ACCESS:7; FOXBAS:8; DB2:9; MYSQL:10; KINGBASE:11; DERBY:12; HSQL:13; TERADATA:14;]
<property name="type" value="1"/>
<property name="batchSize" value="1000"/>
//引用数据库的JNDI数据源,格式为:java:comp/env/DataSource名称。通过JNDI名称找到DataSource,查找数据源时的环境串前缀,在不同的web服务器中不同,如Tomcat中是java:/comp/env,而Weblogic和Websphere中均不需要,可以不填。
服务器 |
Tomcat |
Weblogic |
Webshpere |
Resin |
Jboss |
JNDIPrefix |
java:comp/env |
无 |
无 |
java:comp/env |
Java:
|
<property name="lookup" value="java:comp/env/jdbc/test"/>
</JNDI>
</JNDIList>-->
<!-- 设置spring数据源
<SpringDBList>
//指定与报表中所使用数据源名称一致的spring数据源名称
<DataSource name=" ">
//当设置一个spring数据源时,id对应的value值为默认的datasource;当设置多个spring数据源时,id对应的value值应该与@Bean("xxx")设置的名字保持一致。
<property name="id" value="datasource"/>
//数据库类型编号,0-14依次代表的数据库类型为:[UNKNOWN:0; ORACLE:1; SQLSVR:2; SYBASE:3; SQLANY:4; INFMIX:5; FOXPRO:6; ACCESS:7; FOXBAS:8; DB2:9; MYSQL:10; KINGBASE:11; DERBY:12; HSQL:13; TERADATA:14;]
<property name="type" value=" "/>
</DataSource>
</SpringDBList>-->
<property name="raqsoftDir" value="raqsoft" />
<property name="jspCharset" value="UTF-8" />
<property name="cachedReportDir" value=" cache/report" />
<property name="jreInstallName" value="jre-6u24-windows-i586.exe" />
<property name="cachedIdPrefix" value="A" />
<property name="maxWaitTimeForReport" value="9999" />
<property name="inputCachePath" value="cache/input" />
<property name="alwaysReloadDefine" value="yes" />
<property name="maxConcurrentForReport" value="9999" />
<property name="cachedReportTimeout" value="120" />
<property name="picFileExistTime" value="60" />
<property name="maxWaitForReport" value="9999" />
<property name="defDataSource" value="demo" />
<property name="maxDatasetValueNum" value="-1" />
<property name="logConfig" value="WEB-INF/raqsoftReportLog.properties" />
<property name="cachedParamsTimeout" value="120" />
<!-- 多个用分号隔开,例如:A,192.168.0.10,8888;B, 192.168.0.11, 8888 -->
<property name="clusterMember" value="serverName, host, port" />
<property name="maxCellNum" value="" />
<property name="appUrlPrefix" value="" />
<property name="errorPage4export" value="" />
<property name="webServerType" value="" />
<property name="isCachedFileShared" value="" />
<property name="defaultCellNum" value="" />
<property name="cacheMonitorInterval" value="" />
<property name="errorPage" value="" />
<property name="reportEnterUrl" value="" />
<property name="wrapInchingWidth" value="" />
<property name="wrapByChar" value="" />
<property name="letterSpacingClass" value="" />
<property name=" customFunction" value="" />
<property name="slimerjsDir" value="e:\slimerjs-0.10.3"/>
<property name="echartsJSUrlPrefix" value="http://localhost:6868/demo/raqsoft"/>
<property name="paramCheckClass" value=""/>
<property name="disallowedParamWordList" value=""/>
<property name="inputCachedIdPrefix" value="A"/>
<property name="inputRemoteCached" value="false"/>
<!--多个用分号隔开,例如:A,192.168.0.11,8008;B,192.168.0.22,8008-->
<property name="inputClusterMember" value="serverName,host,port"/>
<property name="inputRowsPerLoad" value="100" />
<property name="theme" value="default" />
<property name="pdfPrintUseJSInIE" value="yes"/>
<property name="uploadFileSuffixLimit" value=""/>
<property name="localPrintListener" value=""/>
<property name="verifyDataIntegrity" value="false"/>
<property name="verifyDataIntegrityMaxAliveTime" value="60000"/>
<property name="printDialogSize" value="750,620"/>
<property name="uuidAsCachedId" value="no"/>
</Server>
</Config>
以上参数说明如下:
(1) logConfig表示报表系统日志记录配置属性文件。日志属性文件的配置说明请参照raqsoftReportLog.properties文件中的说明。
(2) defDataSource表示用户在报表web应用中用到的缺省数据源。如果在润乾报表服务器上使用集算器输出的数据集,特别注意要保证数据源的一致性,即集算器文件用到的数据源名称和报表服务器配置的数据源名称一致。
(3) jspCharset表示报表应用中的JSP页面的字符集,缺省值是UTF-8。
(4) cachedParamsTimeout表示提交给报表的参数在缓存中保存的时间,以分钟为单位。如果不设此参数,缺省值是120分。
(5) cachedReportDir表示报表/大报表缓存的文件夹。用户应对此文件夹有写的权限,并根据报表的数量和访问量的大小以及缓存超时的时间,分配一个合理的空间大小。如果用户没有写的权限或不设此参数或设置错误,则采用JDK默认的临时文件夹(JVM属性java.io.tmpdir的值)。
(6) cachedIdPrefix 表示生成报表缓存文件时的前缀。只有在集群环境中并且多台服务器共享一个报表缓存目录时才需要设置,前缀可以任意指定,集群时不同机器用不同的前缀。
(7) cachedReportTimeout表示报表/填报表缓存保存的时间,以分钟为单位。如果不设此参数,缺省值是120分。此值应根据实际内存大小、缓存文件夹空间大小来调节,一般在1-3小时之间。
(8) maxCellNum 当前报表系统能运算的最大单元格数,能够动态控制并发数。该数值的大小取决于硬件的配置,一般来说内存越大,这些数值可以设得越大。
(9) maxConcurrentForReport表示报表web应用中服务器可以同时计算的报表的个数,以便有效控制服务器的内存使用量。该数值的大小取决于硬件的配置,一般来说内存越大,这些数值可以设得越大,但最多建议不要超过100。
(10) maxWaitForReport表示报表web应用中服务器可以等待计算的报表的个数,以便有效控制服务器的内存使用量。该数值的大小取决于硬件的配置,一般来说内存越大,这个数值可以设得越大,但最多建议不要超过100。
(11) maxWaitTimeForReport表示内存溢出后,最长等待多久才允许新任务访问,以秒为单位,一般建议为30。
(12) appUrlPrefix表示访问报表时的URL中web服务器地址、端口及web应用名组成的一个串,如http://192.168.0.1:8080/myWebApp。一般不用设置,程序可以自动拼出此串。但有时访问申请经过了服务器的多重转发,造成拼出来的串不对时,需要设置此值。特殊情况:如果出现多台机器集群或者内外网多个IP等情况,可能导致最终拼出来的ip不正确,又不能指定死ip,此时可以用/APPMAP来配置。
(13) alwaysReloadDefine是否每次都重新读取报表模板。如果设为no, 服务器启动后,只要某报表被访问一次,该报表就缓存了,之后不会再从文件系统加载此报表模板了,例如修改报表样式后再访问报表,样式修改不生效,除非重启。如果设为yes,每次访问报表时均重新读取报表模板,不能享受性能管理提供的缓存功能。可以在应用开发测试阶段设为yes,以免报表定义改动以后,网页访问报表不能及时刷新。但应用正式上线以后,应将其设为no,此时如果修改了报表定义,应访问refreshReport.jsp来刷新相应的报表定义及其缓存。
(14) errorPage4export增加一个web应用全局配置errorPage,用来指定tag中的exceptionPage和inputExceptionPage的缺省值。
(15) webServerType 应用服务器的类型。
(16) jreInstallName 客户端使用打印applet的时候,如果没有安装jre环境,会自动根据该项配置到应用根目录下查找jre文件下载并安装。
(17) clusterMember 集群时用于配置缓存机器和缓存端口号,目的用于实现集群主机之间的缓存同步。缓存端口号必须是空闲端口号,不是服务器端口号,是集群缓存自己用的端口号。它的格式是:“缓存前缀,IP,端口;…”。需把当前机器的ip和端口号信息写在最前面。
(18) isCachedFileShared 配置是否共享缓存目录,目的用于实现集群主机之间的缓存同步。如果它的值为yes,那么必须设置cachedReportDir属性的值为一个可读写的访问路径。
(19) picFileExistTime表示缓存目录下图片文件的过期时间,时间单位为分钟,如果不设此参数,缺省值是60分。
(20) defaultCellNum 预算单元格数。如果报表格数未设定,则按此设定数作为预算单元格数。目的是客户不必对所有报表逐一设报表格数表达式,而只对他认为的大报表进行设定。此属性只有设置了maxCellNum才有意义。
(21) raqsoftDir 配置web应用中raqsoft目录相对于应用根目录的位置,raqsoft目录是部署报表环境所必须的系列目录,缺省默认为应用根目录下的raqsoft。
(22) maxDatasetValueNum 数据容量控制,用来控制报表系统并发数据集的数据总量峰值,以防报表服务器因为数据量太大而内存溢出造成服务器崩溃,其中单个数据集的数据量=字段数*行数。
(23) inputCachePath 填报表上下载文件的临时缓存目录,可以是绝对路径或相对web根目录的相对路径。如果没有配置,系统默认在java用户主目录下创建一个目录input_tmpdir。使用相对路径时,路径前不需要加斜杠“/”。
(24) cacheMonitorInterval 缓存监控程序执行缓存监控的时间间隔。
(25) errorPage 展现报表错误信息的页面。使用报表标签exceptionPage也可以配置报表错误信息的页面,当exceptionPage缺省时,使用errorPage属性中配置的页面,当exceptionPage已经配置时,优先使用exceptionPage中配置的页面。
(26) reportEnterUrl 展现报表时的页面url,对于某些系统中报表不是直接访问jsp时,需要指定此属性。比如struts里,是用.do来访问的。
(27) wrapInchingWidth 自动换行时的留白宽度。
(28) wrapByChar 自动换行时无需考虑避首避尾或者单词整体切分等等,属性值为yes或者no。
(29) letterSpacingClass 设定自动换行单元格的自定义字符间距的java类名。
(30) customFunction自定义函数配置文件路径,自定义函数需要在customFunctions.properties中登记函数,该文件默认放置位置为:demo\WEB-INF\classes\config。当该文件放置到默认位置以外的位置时,需要配置customFunction属性。
(31) slimerjsDir 设定slimerjs安装目录,支持绝对路径/相对路径,相对路径时相对webroot目录。
(32) echartsJSUrlPrefix配置echarts图形的js所在的父目录的访问地址。当应用以war包方式发布时,必须配置此项,可配置成绝对路径或http方式。注:不是以war包方式发布时,可以不用配置此项,程序会自动设置此项。
slimerjsDir 和echartsJSUrlPrefix属性主要用于Echarts统计图的导出和打印。具体可参考《教程》第三方图形的导出与打印小节。
(33) paramCheckClass设置参数值校验的类路径。默认使用内置的检查工具 com.raqsoft.report.util.DisabledCharChecker。
(34) disallowedParamWordList设置报表的禁用参数值,多个参数值之间可用逗号分隔,英文字母不区分大小写。
(35) inputCachedIdPrefix设置填报集群中报表缓存的前缀,只有在填报集群环境中才需要设置。
(36) inputRemoteCached 表示在填报集群环境中,远程访问其他机器的填报缓存时是否在本地生成缓存文件。缺省值是false。
(37) inputClusterMember 配置填报集群时缓存机器和缓存端口号,目的是实现填报集群机器之间的缓存同步。它的格式是:“缓存前缀,IP,端口;…”
(38) inputRowsPerLoad 设置填报表分批加载数据时,每批展现的数据行数,缺省值是50条。
(39) theme 修改预览页面的easyui主题样式,缺省值是default。
(40) pdfPrintUseJSInIE 是否使用pdfjs在IE浏览器中实现PDF打印。若值为yes,则使用pdfjs来打印;否则还需要安装adobe的PDF插件来实现打印。 特别说明:pdfjs只适用于IE9及以上版本,如果是IE9以下,会自动转变成使用PDF插件。具体使用说明可参考《程序员参考》 报表在IE浏览器中PDF打印不使用安装插件的说明 小节。
(41) uploadFileSuffixLimit 设置填报表上载文件类型列表,多个参数值之间用逗号分隔,默认的文件类型列表为“txt,doc,xlsx,xml,jpg,gif,png,avi,bak,bmp,img,swf,xls,csv,docx,pdf”。如果上载文件类型不想要任何限制,参数值可设置为null。
(42) localPrintListener 设置本地打印程序成功打印报表后,可运行的监听类,实现用户设计的功能。参数值是监听类的类名,带包路径。
(43) verifyDataIntegrity 设置填报表提交数据时,数据传输的完整性校验。默认值是false。当值为true时,启用校验,此时需要在填报的jsp中引入与校验相关的2个js(raqsoft/cryptojs目录下的core.js、sha256.js)。
(44) verifyDataIntegrityMaxAliveTime 设置填报表数据提交最长传输时间。若超过校验时间则会检验失败。默认值是60秒。
(45) printDialogSize 设置本地预览打印的窗口尺寸大小。缺省是最小值“750,620”。当值为maximize时,表示预览打印窗口的最大化。当值为“900,650”时,表示预览打印窗口宽度为900,高度为650。
(46) uuidAsCachedId 设置是否使用uuid作为报表缓存文件名称。默认值是no。当设置为yes时,会随机获取一个uuid作为报表缓存文件名称,此时cachedIdPrefix设置的报表缓存前缀将不再生效。
XML文档中预定好的实体:实体必须以符号“&”开头,以符号“;”结尾 |
||
< |
< |
小于号 |
> |
> |
大于号 |
& |
& |
和 |
' |
‘ |
单引号 |
" |
“ |
双引号 |
参数名均为大小写相关,用户必须根据自己应用的实际情况填写相应的参数值。
关于润乾报表报表中心的属性设置说明,请打开文件(WEB-INF\reportCenter.xml)。内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<reportCenter>
<!-- 超级管理员密码初始为a000000 -->
<managerPass>82273A6BA2126D3AF24CE2D0CB0AF515</managerPass>
<roles>
<!--下一个新增机构的roleId编号 -->
<newId>2</newId>
<!--机构角色,超级管理员和管理员不可修改。role标签的属性说明:
name:机构名称;
roleId:机构编号,用于区别角色;
nodeList: 角色可见的节点id—用于生成该角色登录时看到的节点树过滤;
dsList: 设计器中可用数据源—远程服务登录能看到的数据源
dirmodeRptList:报表设计器资源路径权限—远程服务登录能看到的资源树和管理权限;
dirmodeSplList:集算器设计器资源路径权限—远程服务登录能看到的资源树和管理权限;
-->
<role name="超级管理员" roleId="0" allAuth="true" nodeList="" />
<role name="管理员" roleId="1" allAuth="true" nodeList="" />
<role name="访客" roleId="-1" dirmodeRptList="demo,1" nodeList="1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76" dsList="demo" dirmodeSplList="demo,1" />
</roles>
<users>
<!--下一个新增用户的Id编号 -->
<newId>2</newId>
<!--user标签的属性说明:
id:机构名称;
roleId: 用户所属的机构角色id;
name: 用户名;
password: MD5加密的用户密码
email:邮箱;
phone:电话;
-->
<user id="-1" name="raq_visitor" roleId="-1" password="82273A6BA2126D3AF24CE2D0CB0AF515" />
</users>
<!--用来存储报表DQL Server数据源与dct、vsb文件关联关系-->
<dbs>
<db name="DataLogic">
<dct>dcts/demo.dct</dct>
<vsb>vsbs/demo.vsb</vsb>
</db>
<db name="DataLogicMDB">
</db>
</dbs>
<!--查询分析管理中的文件列表。标签必须与后缀名一致,程序会自动根据标签名来区分文件类型-->
<files>
<dct>dcts/demo.dct</dct>
<vsb>vsbs/demo.vsb</vsb>
.. …
</files>
<!--机构可选的目录列表-->
<paths>
<path value="" />
<path value="input" />
<path value="dcts" />
<path value="vsbs" />
<path value="analyseFiles" />
<path value="demo" />
</paths>
<!--功能树-->
<tree>
<newId>1</newId>
<name scale="1.1" paged="1" scroll="0" raq="rpx/网格式报表.rpx" url="onLineUser.jsp">首页31</name>
</tree>
<newRptId>1</newRptId>
<reports>
<!-- rpt和spl文件缺省路径,在上传时候可选择,等同于在paths中配置 -->
<rptRoot>rpx</rptRoot>
<splRoot>spl</splRoot>
<!-- 上传报表时候选择spl脚本的话,可以将spl保存到这里 -->
</reports>
<!--引用润乾报表核心配置文件的路径 -->
<raqsoftConfig>WEB-INF/raqsoftConfig.xml</raqsoftConfig>
<Configs>
<!-- 是否使用验证码 -->
<validImg>0</validImg>
<!-- 登陆验证失败次数检测,默认5次 -->
<login-fail-limit>6</login-fail-limit>
<!-- 登陆验证失败间隔时间检测,默认1分钟 -->
<login-limit-check-interval>2</login-limit-check-interval>
<!-- 登陆验证失败锁定默认10分钟 -->
<locktime>11</locktime>
<!-- 以下是单点登录用的配置,注意配置中的&符号要转义 -->
<!-- 开启单点登录配置,需要同步配置过滤器com.raqsoft.center.console.RaqTokenFilter -->
<sso-enable>0</sso-enable>
<!-- 单点登录向远程登入校验的url -->
<sso-login>http://127.0.0.1:8080/to/i</sso-login>
<sso-get-token>http://localhost:8080/auth/get?redirect=http://localhost:8081/test/raqsoft/center/ssoActivate</sso-get-token>
<!-- 实践表明主流系统以下四个配置往往不需要了 -->
<!-- 单点登录向远程校验令牌,额外逻辑的url -->
<!-- <sso-verify>http://127.0.0.1:8080/token/testsso?action=1&token={0}</sso-verify> -->
<!-- 单点登录向远程登出,额外逻辑的url -->
<!-- <sso-logout>http://127.0.0.1:8080/token/testsso?action=2&username={0}&token={1}</sso-logout> -->
<!-- 单点登录客户端cookie作用目录,一般写斜杠 -->
<sso-cookie-path>/</sso-cookie-path>
<!-- 单点登录客户端cookie作用域,主域相同才可以实现单点登录,这是一个特点,www.location1和www.location2不互通无法实现此功能 -->
<sso-cookie-domain>localhost</sso-cookie-domain>
<!-- 以下配置暂时不可在界面操作 -->
<!-- 是否加密登录时请求中带的code,1开启,注意只有md5加密方式可用!默认不开启 -->
<pass-encode />
<!-- 自定义加密类,不配置就是默认类,加密方式md5 com.raqsoft.center.util.DefaultReportCenterEncoder -->
<!-- <encoder></encoder> -->
<!-- 用户会话超时时间/秒 -->
<session-alive>3600</session-alive>
<!-- 左侧树样式jsp,accordion/tree,手风琴或者下拉树 -->
<accordionNodes>accordion</accordionNodes>
</Configs>
</reportCenter>
当报表数据量较大,计算过程中消耗大量内存,或计算时间比较长,我们建议开启报表缓存设置。如果发布的报表类型是file,那么只要设置alwaysReloadDefine为no,就开启了报表缓存机制,它在计算时,在指定的时间内,报表模板文件仅加载一次,报表仅运算一次。其它操作都从缓存中提取,如翻页等等。如果发布的文件类型是defineBean,那么,alwaysReloadDefine将失效,系统会启动缓存机制,如果不需要缓存,建议通过一个动态变化的值来命名beanName属性,当然在request中保存的对象名与之一一对应.
缓存系统是以报表模板为某报表的缓存总入口,如果设成的yes,那么每次有人访问时都会重新加载模板,总入口就改变了,以前的缓存就没用了。alwaysReloadDefine为系统是否启用缓存提供了一个总开关,我们还可以通过tag标签的useCache与timeout两个属性来控制具体的每一个报表是否使用缓存数据,即是否重新计算数据。alwayReloadDefine属性设置为no时,tag标签中的useCache与timeout属性才会起作用。当设置useCache为yes,timeout为30时,系统在报表运算过程中将启动缓存,并且每次计算仅取30分钟以内生成的有效报表,如果没有此时间内的,则产生一个新报表。
报表缓存功能配置在raqsoftConfig.xml中,raqsoftConfig.xml小节中的(5)(6)(7)(13)有说明,如下所示:
<property name="cachedReportDir" value="E:\work\report\cached"/>
<property name="cachedIdPrefix" value="A"/>
<property name="cachedReportTimeout" value="30"/>
<property name="alwaysReloadDefine" value="yes"/>
想要了解更多关于报表运算或集群缓存的使用可参考《高级指南》性能管理小节。
大量客户端并发访问报表服务器时,容易出现服务器性能不够的情况,例如运算太慢、内存吃紧等,此时可以控制访问的并发数。
报表的并发控制在raqsoftConfig.xml中,raqsoftConfig.xml中的(8) (9)(10)(11)有说明,如下所示:
<property name="maxCellNum" value="100000"/>
<property name="maxConcurrentForReport" value="10"/>
<property name="maxWaitForReport" value="10"/>
<property name="maxWaitTimeForReport" value="30"/>
配置数据库允许的最大连接数和应用服务器的连接池个数时,必须大于 报表的并发数+报表的等待数
访问量高的配置方案
以JVM内存设置为512M的服务器为例子,假设并发量为1000,用户要求的报表为200单元格(差不多为一张A4纸的报表),不管是图片还是文本,我们以一个单元格平均为1.2K计算,可以得出报表系统的内存使用量为:
1000*200*1.2k/1024k=234.375M
根据以上计算,我们在实际生产系统中,我们建议:
cachedReportTimeout设置成60分钟,用户数据量大的情况下,减少报表缓存时间。
alwaysReloadDefine设置为no,开启缓存,这样客户在翻页时,不再与数据库交互,减轻数据库服务器的负担。同时在tag标签中把useCache设置为yes,而timeout可以根据自己的实时要求进行设置,如果数据一直都不会变的话,建议设置为-1 。
maxConcurrentForReport为1000,这是并发量
maxWaitForReport设置为2000
maxWaitTimeForReport设置为10秒钟,10秒内得不到响应,用户需要再次请求。
maxCellNum,在内存中,同时计算的单元格数量建议为200单元格*50页=10000格
数据量大的配置方案
以JVM内存设置为1G的服务器为例子,假设并发量最大为5,用户请求的报表为200单元格*1000页(数据量可能上千万,但通过条件查询,最其中几千条记录),一般大数据量都没有图片,所以以每一个单元格为0.5k计算,那么在最大并发量下,得出报表系统内存使用量为:
200*1000*5*0.5/1024K=488.28125M
根据以上计算,我们在实际生产系统中,我们建议:
cachedReportTimeout设置成180分钟,用户数据量大的情况下,增大报表缓存时间。
alwaysReloadDefine设置为no,开启缓存,这样客户在翻页时,不再与数据库交互,减轻数据库服务器的负担。同时在tag标签中把useCache设置为yes,而timeout可以根据自己的实时要求进行设置,如果数据一天都不会变的话,建议设置为-1 。
maxConcurrentForReport为5,这是并发量
maxWaitForReport设置为10
maxWaitTimeForReport设置为600秒钟,10分钟内得不到响应,用户需要再次请求。
maxCellNum,在内存中,同时计算的单元格数量建议为200单元格*500页=100000格
在开发模式下的配置
在开发过程中,我们可能时不时的修改报表,并且想不在重启web服务器的情况下,在页面上看到修改效果,这时我们可以设置raqsoftConfig.xml中的alwaysReloadDefine为yes,如下所示:
<property name="alwaysReloadDefine" value="yes"/>