#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. Короче говоря, не сработало. Длинная история была отредактирована в исходном сообщении.