如何在Spring Boot应用程序中更改BIRT创建的映像文件的位置

时间:2016-09-30 20:19:58

标签: java eclipse spring spring-boot birt

我有一个Spring Boot应用程序,它包装了Eclipse BIRT报告工具,并通过winsw作为Windows服务运行。当呈现包含引擎生成的图表的报表时,Spring Boot会将图像文件保存在它在Windows/Temp目录中创建的文件夹中。此文件夹及其内容在启动时仍然存在,这是不太理想的。

应用程序依赖于存在于软件包的所有安装所存在的预定义位置的数据文件夹。鉴于此,理想的情况是在包的数据文件夹中创建文件夹,以便轻松管理。有没有办法实现这一点(最好是一种允许嵌入式Tomcat服务器查找和提供文件的方法)?

编辑:已更新@Magnus的回复结果

有问题的图像是由ReportEngine渲染过程生成的,所以我认为它是BIRT的东西而不是Tomcat的东西,但只是为了确保我将server.tomcat.basedir=path/to/directory添加到我的application.properties文件中。仍然写信给Windows/Temp

然而,这个回复让我思考,我发现BIRT的EngineConfig有一个setTempFolder方法。将其设置为指向所需文件夹(属性文件中具有server.tomcat.basedir值)会导致BIRT在temp文件夹中工作,但生成的图像仍保存到Windows\Temp目录中。

编辑:更新2

我能够在EngineConfig中设置birt.viewer.working.path属性,并通过从ReportDesignHandle(或者ReportRunnable)中检索值来确认它是否已设置。使用更改的值,ReportEngine现在可以在正确的目录中工作,但仍将图像放入Windows\Temp文件夹。覆盖java.io.tmpdir属性什么也没做。

修改:更新3

这种工作..在HtmlRenderOption中设置图像文件夹位置导致应用程序没有为Windows\Temp中生成的图像创建文件夹(yay!)。但是,它并没有将图像放在HtmlRenderOption中指定的位置(boo!),所以我不确定在哪里查看,因此可以定期清理这些图像文件。

2 个答案:

答案 0 :(得分:1)

尝试在HTMLRenderOption中设置imageDirectory。

HTMLRenderOption options = new HTMLRenderOption();
options.setImageDirectory("path/to/image/directory");
...
renderTask.setRenderOption(options);

请参阅http://www.eclipse.org/birt/documentation/integrating/reapi.php

答案 1 :(得分:0)

嵌入式tomcat默认在java.io.tmpdir系统属性指定的临时目录中创建目录 您可以使用应用程序属性server.tomcat.basedir

手动设置tomcat temp dir

查看代码库,有一些地方可以处理创建临时文件 从我可以收集临时图像目录设置的主要位置是ParameterAccessor类 逻辑相当复杂,但似乎默认为${birt.viewer.working.path}/report/images 如果未设置工作路径系统属性,或者目录不可写,则默认为java.io.tmpdir目录。
我会尝试设置系统属性birt.viewer.working.path,确保它是可写的 如果这不起作用,您可能不得不求助于覆盖java.io.tmpdir系统属性。