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.