grails / внешняя конфигурация / grails.конфиг.locations-абсолютный файл пути "не существует"?

Я пытаюсь использовать встроенный механизм Grails для загрузки внешних файлов конфигурации (*.groovy и *.свойства) вне развернутого файла WAR. Документация подразумевает, что это просто случай установки grails.config.locations соответствующей classpath: или file: пути.

Я настроил Config.заводной с:

String externalConfigLocation = System.getProperty("SYSTEM_PROPERTY_KEY")
if (!grails.config.locations || !(grails.config.locations instanceof List)) {
    grails.config.locations = []    
}
if (classpathExternalConfigLocation) {
    String pathToResource = ""file:${basedir}" + File.separator + externalConfigLocation+"""

    print "Loading external configuration file: ${pathToResource}n"
    grails.config.locations << pathToResource
}

однако это не сработало, с сообщениями об ошибках, указывающими на файл"не существует". Однако печать абсолютного пути, хранящегося в grails.config.locations указывает на это. Я пробовал некоторые комбинации:

  • classpath:configurationFile.properties
  • file:c:path_to_fileconfigurationFile.properties
  • c:path_to_fileconfigurationFile.properties

но во всех этих случаях файл не может быть найден.

очень странно-советую оценить. Или предложения по отладке.

2 ответов


Это то, что я обычно делаю:

grails.config.locations = ["classpath:${appName}-config.groovy",
                           "file:./${appName}-config.groovy"]
if (System.properties["${appName}.config.location"]) {
   grails.config.locations << "file:" + System.properties["${appName}.config.location"]
}

Это позволяет мне поместить файл в корень проекта, чтобы настроить свойства локально при разработке (используя file: location) и файл в пути к классам сервера при развертывании как war. Папка lib Tomcat находится в пути к классам, поэтому это хорошее место для размещения файлов, если вы используете Tomcat. Помещая имя приложения в файл, вы можете иметь несколько файлов конфигурации без их наступления друг на друга.

обязательно добавьте локальный файл конфигурации в svn: игнорировать или .gitignore, чтобы вы не проверяли его в системе управления версиями. Каждый разработчик может иметь свои собственные настройки (или просто использовать значения по умолчанию), не затрагивая других.

это отличный способ экстернализации паролей базы данных и других производственных значений. Приложение deployer (в идеале не разработчик) управляет файлом и его содержимым, что позволяет избежать проверки паролей в системе управления версиями. Гораздо лучше, чем использование JNDI IMO.


Я не думаю, что вам подходит.Дир при запуске войны