Как заставить boxfuse создать образ, содержащий исполняемый файл jar и файл конфигурации, который будет указан в основном аргументе?
Я играю с boxfuse, пытаясь "слить" изображение, которое содержит исполняемый файл JAR. Моему исполняемому JAR-файлу дается путь к файлу конфигурации в качестве аргумента его основного метода, например так:
java -jar my-executable.jar -conf /some/path/to/my/conf.json
Где файл conf.json
считывается процессом JAR для настройки, например, порта, свойств подключения к базе данных и т. д.
Я понимаю, как передать пользовательские аргументы, используя -jvm.main.args="-conf /some/path/to/my/conf.json"
Однако я не знаю, как получить файл конфигурации в самом образе. Очевидно, что путь должен указывать на действительный файл, который существует в изображении.
В dev, test и production я хотел бы использовать один и тот же исполняемый JAR, но разные конфигурационные файлы для каждой среды. В настоящее время я не вижу возможности использовать разные изображения для каждой среды. Я вижу, что есть некоторая поддержка для упаковки определенных конфигураций с полезными нагрузками Dropwizard, но нет упоминания о чем-то похожем для исполняемых JAR-файлов.
Есть ли более общий способ упаковки произвольных файлов в изображение с предсказуемыми путями, на которые я могу ссылаться в jvm.main.args
?
PS в моем случае исполняемый JAR - это приложение Vert.x, но я думаю, что общий случай применим.
1 ответ
Что вы можете сделать, это упаковать конфигурацию для всех сред (dev, test & production) в исполняемый файл JAR. Таким образом, у вас есть dev.json, test.json и production.json
Затем вы можете использовать такой метод, как определение среды, например, с помощью переменной среды, чтобы определить правильную среду во время выполнения и выбрать правильную конфигурацию, которую затем можно загрузить из пути к классам вместо файловой системы.
Это позволяет создать файл jar и образ Boxfuse только один раз и запустить его без изменений во всех средах.
PS: Я только что поднял вопрос о том, чтобы вы добавили первоклассную поддержку Vert.x в ближайшем будущем, чтобы сделать все еще проще: https://github.com/boxfuse/boxfuse-issues/issues/28