Конфигурация источника данных для внешних источников Grails
Grails 1.x позволяет использовать внешние файлы конфигурации, устанавливая директиву grails.config.locations. Существует ли аналогичный подход для экстернализации конфигурации базы данных в Datasource.groovy(без настройки JNDI)?
Было бы полезно иметь возможность настроить учетные данные БД в простой файл конфигурации вне приложения.
Спасибо заранее!
Ответы
Ответ 1
Вы можете использовать файл свойств, указанный в grails.config.locations, как способ экстернализации конфигурации источника данных. Ниже приведен пример создания проекта Grails:
В моем DataSource.groovy я указываю это для рабочей среды:
....
....
production {
dataSource {
dbCreate = "update"
driverClassName = "com.myorg.jdbcDriverNotExists"
url = ""
username = ""
password = ""
}
}
....
....
Я указываю файл внешних свойств в свой Config.groovy:
grails.config.locations = [ "classpath:app-config.properties"]
В файле свойств (хранящемся в grails-app/conf/) я указываю фактическую информацию о источниках данных:
dataSource.driverClassName=oracle.jdbc.OracleDriver
dataSource.url=jdbc:oracle:thin:@host:port:sid
dataSource.username=sa
dataSource.password=secret
Я также использую файл свойств как способ переопределить другие значения, которые находятся в Config.groovy. Когда приложение развернуто, если мне нужно изменить информацию о источнике данных, я просто редактирую файл /WEB -INF/classes/app-config.properties и перезапускаю.
Ответ 2
Ответ выше не влияет на конфигурацию. Он близок, но конфигурация все еще находится в приложении.
Я бы использовал среду JVM var при запуске приложения/сервера, чтобы указать на местоположение вне приложения, в котором находится внешняя конфигурация. Считайте среду var в файле config.groovy и используйте ее, чтобы получить внешний файл конфигурации. Что-то вроде этого:
def extConfig = System.properties.getProperty('ENVVAR');
grails.config.locations = [ "file:${extConfig}/${appName}-config.groovy"]
Ответ 3
Для меня это не работает. Чтобы получить переменную окружения.
Лучшее использование:
System.getenv().get("ENVVAR").toString()
Ответ 4
Просто поместите расположение файла конфигурации в файл Config.groovy
grails.config.locations = [
"file:/yourDirectory/${appName}/${Environment.current.name}-datasource.properties",
"file:/yourDirectory/${appName}/${Environment.current.name}-config.groovy",
"classpath:${appName}-${Environment.current.name}-datasource.properties",
"classpath:${appName}-${Environment.current.name}-config.groovy"
]
И поместите все данные о источниках данных и других значениях конфигурации в соответствующий файл. Следовательно, вы можете выполнить экстернализацию конфигурации и не нуждаться в перезагрузке для изменения значений.