Свойство, которое работает в настройках CloudHub, не работает в файлах свойств

#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. Спасибо за помощь!