#java #spring #mule #cloudhub
#java #spring #mule #cloudhub
Вопрос:
Мое приложение использует открытый ключ шифрования в каталоге src / main / resources в подкаталоге под названием keys. Чтобы получить к нему доступ локально, мне нужно только указать путь к src/main/resources/keys/<mykey>.gpg
Поскольку структура на Cloudhub отличается, установка указанного выше пути не будет работать, и вместо этого я должен установить его в ${app.home}/keys/<mykey>.gpg
. Это работает, когда я устанавливаю свойство непосредственно в Cloudhub, но когда я устанавливаю его в своем файле свойств, я получаю сообщение об ошибке…
Could not resolve placeholder 'app.home' in string value
"${app.home}/classes/keys/<mykey>.gpg"
Я также не могу разрешить свойство при локальном запуске. Я предполагаю, что сначала разрешаются свойства в application-$ {ENV}.properties, затем устанавливается свойство $ {app.home}, а свойства Cloudhub разрешаются последними.
Мой вопрос в том, что я могу сделать, чтобы убедиться, что $ {app.home} правильно разрешен из файла свойств, или есть другой способ, которым я могу добиться того же, не используя его? В идеале мы не хотим устанавливать местоположение открытого ключа каждый раз, когда мы повторно развертываем приложение в Cloudhub.
Спасибо!
РЕДАКТИРОВАТЬ: Для большей ясности, вот где я устанавливаю свойство в application-DEV-properties: cibc.public.key.location=${app.home}/classes/keys/<mykey>.gpg
Комментарии:
1. вы используете mule 3? или 4?
2. @Ryan Carter Мы используем Mule 3.
3. Обновленный ответ.
Ответ №1:
Я думаю, что это проблема в Mule 3 в определенных сценариях. Можете ли вы попробовать установить ignore-unresolvable="true"
в свойстве-заполнителе. Это должно подсказать spring перейти к следующему месту поиска.
<context:property-placeholder location="your.properties" ignore-unresolvable="true"/>
Обновить
Также попробуйте разделить свойства на две записи:
cibc.public.key.location=classes/keys/<mykey>.gpg
Затем в вашей конфигурации Mule:
identityFile="${app.home}/${cibc.public.key.location}"
Комментарии:
1. Я попробовал это, но я получил ошибку во время выполнения: «Атрибуту ‘ignore-unreolable’ не разрешено появляться в элементе ‘context:property-placeholder'».
2. вам не хватает ‘v’: ‘игнорировать-неразрешимо’ -> ‘игнорировать-неразрешимо’
3. Ох… упс. Спасибо!
4. Итак, я исправил проблему с правописанием, но при запуске в Cloudhub я получаю ту же проблему, когда он не может найти свойство $ {app.home}. Может быть, это потому, что я использую свойство внутри свойства?
5. Я заставил его работать! Я в основном принял ваше предложение разбить свойства на два. Поскольку к свойству $ {app.home} больше не было доступа из файла свойств, больше не было необходимости в «игнорировать-неразрешимо». Поскольку при локальном запуске в качестве корневого пути не используется $ {app.home}, мне пришлось немного поработать с логикой, чтобы проверить среду и соответственно использовать $ {app.home} или src / main / resources. Спасибо за помощь!