Как я могу изменить расположение файлов изображений, созданных BIRT, в приложении Spring Boot

#java #eclipse #spring #spring-boot #birt

#java #eclipse #spring #spring-boot #birt

Вопрос:

У меня есть приложение Spring Boot, которое оборачивает инструмент отчетов Eclipse BIRT и запускается как служба Windows через winsw. Когда выводится отчет с диаграммой, сгенерированной движком, Spring Boot сохраняет файл изображения в папке, которую он создает в Windows/Temp каталоге. Эта папка и ее содержимое сохраняются при запуске, что менее чем желательно.

Приложение зависит от папки данных, которая существует в предопределенном расположении, которое существует для всех установок пакета программного обеспечения. Учитывая это, идеальной ситуацией было бы создание папок в папке данных пакета, где им можно легко управлять. Есть ли какой-либо способ добиться этого (предпочтительно метод, позволяющий встроенному серверу Tomcat находить и обслуживать файлы)?

Редактировать: обновлено с учетом результатов ответа @Magnus

Изображения, о которых идет речь, генерируются процессом рендеринга ReportEngine, поэтому я думаю, что это вещь BIRT, а не Tomcat, но просто для уверенности я добавил server.tomcat.basedir=path/to/directory в свой application.properties файл. Все еще пишет Windows/Temp .

Однако этот ответ заставил меня задуматься, и я обнаружил, что в EngineConfig BIRT есть setTempFolder метод. Установка этого параметра для указания на нужную папку (со server.tomcat.basedir значением в файле свойств) приводит к тому, что BIRT выполняет работу во временной папке, но сгенерированные изображения по-прежнему сохраняются в WindowsTemp каталоге.

Редактировать: обновление 2

Я смог установить birt.viewer.working.path свойство в EngineConfig и подтвердить, что оно было установлено, извлекая значение из ReportDesignHandle (или, возможно, ReportRunnable). С измененным значением ReportEngine теперь выполняет свою работу в нужном каталоге, но по-прежнему помещает изображения в WindowsTemp папку. Переопределение java.io.tmpdir свойства ничего не дало.

Редактировать: обновление 3

Этот вид работ.. Установка местоположения папки изображений в HtmlRenderOption приводит к тому, что приложение не создает папку для сгенерированных изображений в WindowsTemp (ура!). Однако он также не помещает изображения в местоположение, указанное в HtmlRenderOption (boo!), Поэтому я не совсем уверен, где искать, чтобы такие файлы изображений можно было периодически очищать.

Ответ №1:

Попробуйте установить imageDirectory в HTMLRenderOption.

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

смотрите http://www.eclipse.org/birt/documentation/integrating/reapi.php

Комментарии:

1. Почти готово. Пожалуйста, ознакомьтесь с комментариями в обновлении 3 исходного сообщения для получения подробной информации.

2. Где сейчас создаются изображения?

3. Вы установили абсолютный путь для каталога изображений? В противном случае изображения будут сгенерированы в папке проекта.

4. Я действительно использовал абсолютный путь.

Ответ №2:

Встроенный tomcat по умолчанию создает каталог во временном каталоге, указанном java.io.tmpdir системным свойством.
Вы можете вручную установить каталог tomcat temp с помощью свойства application server.tomcat.basedir

Глядя на кодовую базу, есть несколько мест, где речь идет о создании временных файлов.
Из того, что я могу собрать, основное место, в котором установлен временный каталог изображений, задается классом. ParameterAccessor
Логика довольно сложная, но, похоже, по умолчанию ${birt.viewer.working.path}/report/images используется .
Если системное свойство working path не задано или каталог недоступен для записи, то по умолчанию java.io.tmpdir будет использоваться каталог.
Я бы попробовал установить свойство system birt.viewer.working.path , убедитесь, что оно доступно для записи.
Если это не сработает, вам, возможно, придется прибегнуть к переопределению java.io.tmpdir системного свойства.

Комментарии:

1. Короче говоря, не сработало. Длинная история была отредактирована в исходном сообщении.