Конфигурация источника данных для внешних источников 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"
    ]

И поместите все данные о источниках данных и других значениях конфигурации в соответствующий файл. Следовательно, вы можете выполнить экстернализацию конфигурации и не нуждаться в перезагрузке для изменения значений.