本帖最后由 sdueducn998 于 2016-5-19 13:54 编辑
剥离HSQL服务,设置为独立Server模式(以下为文字说明,附件包里面有图文版说明和相关文件) FineReport集成的HSQL服务会莫名其妙的出现各种问题,例如当前线程锁死,无法使用暂存等等。原因在于自带HSQL服务启动模式并非server,所以会出现多线程使用时锁死,无法访问。解决这一问题的方法是运行系统时不使用Finereport自带服务启动和管理finedb下的数据库,而使用其他方式。 目前使用mysql作为服务管理的插件已经上线,虽然可以替代大部分的原HSQL管理下的功能,但是部分功能无法实现,例如填报暂存功能。在FR不进行大的变动前,比较合适的方法是将HSQL单独提取做成独立服务,并采用server多线程模式。具体方法如下: 1. 下载HSQLDB(可以直接从官网下载)提取hsqldb.JAR,或者直接下载该hsqldb.JAR。 2. 下载完成后,将FineReport \WebReport\WEB-INF目录下的finedb文件夹,整体拷贝到你需要的目录,作为以后独立HQSL服务器要访问的数据库。 例如放到C盘根目录下。名称可以任意,尽量不要用中文和特殊符号。该目录下的文件,也可以重新命名,但要注意的是,所有文件的名称必须相同,后缀不可以更改。建议还是不要修改,用默认的db做文件名即可。注意:拷贝后需要删除db.lck文件(如有)! 3. 将下载完成的hsqldb.jar或者HSQLDB解压后lib目录内的hsqldb.jar拷贝至刚才路径的finedb文件夹中。例如我这里是c:\finedb 4. 测试hsql服务器是否可以正常使用(该步骤可以跳过,直接进入下一步) 1) 以管理员模式启动CMD模式,进入到存放hsqldb.jar这个文件的文件夹,录入我这里是C:\FINEDB 2) 输入以下命令(直接拷贝粘贴即可):
java -classpath hsqldb.jar org.hsqldb.Server -database.0../finedb/db -dbname.0 xdb
注释:这是启动hsql服务的命令,Server代表启动的是服务器模式,可以多线程访问,”-database.0 ../finedb/db”是指定数据库存放路径及数据库名称,../finedb/是路径,db是数据库名,这里应用的是相对路径,当然也可以使用绝对路径。-dbname.0 xdb 是数据库别名,xdb可以任意设定,这个别名下面会用到。整个命令的含义是,打开相对路径finedb下的db数据库,并命名别名为xdb。如果该目录下没有该数据库,则新建。注意命令行内是有空格的!!! 成功界面如下: 3) 测试数据库是否可以连接。 一定不要关闭刚才打开的CMD窗口,关闭以后服务就中止了。 新开一个CMD窗口,依旧进入C:\FINEDB,输入以下命令:
java -cp hsqldb.jar org.hsqldb.util.DatabaseManager
这是调取hsql图形化数据库管理器的命令。成功后如下图: 按照如下设置: Type这里我们启动的是Server模式,所以要选择Server,URL这里,将我们刚才命名的别名xdb添加上,然后点击OK,出现下列画面就代表Server启动和连接正常。左侧就是finedb下db.data里面的所有表了。如果设置了非9001端口,请加上端口号。如出现下列界面,证明服务器启动正常,可以顺利连接。左侧出现的就是db数据库里面的数据了。 5. 如果第四步执行的没有问题,那我们就可以将单独的HSQL服务设置为随系统启动了。 1) 建立两个bat批运行文件。名称自定义即可,我的是runServer.bat和runManager.bat。 runServer.bat是启动HSQL服务的,是必须;runManager.bat是启动管理界面的,可选用。建议也一起创建。 2) 打开runServer.bat,用文本打开或者用notepad++,建议用notepad++,里面写入如下内容: cd C:\finedb @Java -classpath hsqldb.jar org.hsqldb.Server-database.0 ../finedb/db -dbname.0 xdb 注释:cd后面是你存放数据库文件和hsqldb的路径,可以根据实际情况进行修改,这一句的作用就是转至该目录下;下一句就是在该目录下执行什么命令,与前面进行测试的命令行是一致的,不再解释。 3) 修改完毕后,保存。 4) 然后直接运行该bat文件,可以看到服务已经启动。注意在运行时,不能关闭cmd窗口,关闭窗口服务会一同关闭。 6. 将hsql服务设置成随系统自动启动 如果要成为随系统启动的服务,可以将runServer.bat设置成自动启动,不过这样每次都有个cmd窗口,不小心关了就麻烦。所以我们用vbs做一个隐藏cmd窗口的功能。 1) 新建一个文本文档,输入以下内容:
DIM objShell setobjShell=wscript.createObject("wscript.shell") WScript.Sleep(1000) iReturn=objShell.Run("cmd.exe /Cc:\finedb\runserver.bat", 0, TRUE)
这里c:\finedb\runserver.bat可以根据你的批处理文件位置和名称进行更改。其他保持不变。或者根据情况修改。然后另存为vbs文档。 2) 将该vbs文件拖到启动文件夹内即可。 经过以上步骤,将原集成的HSQL,剥离出来,并设置为自动启动的server模式,基本上可以解决所有因为多线程锁死导致的问题。欢迎大家一起交流。
所用软件,已经打包。本人测试环境为win7 x64 SP1.
具体操作步骤和相关文件请下载附件
这个说明也是在参考了论坛和其他高手的文档基础之上制作,所以免费。也希望FR可以做的更好,如果有可能,是否可以考虑将HSQL更换为通用型更好的mysql或者sqlserver数据库。
|