Подтвердить что ты не робот

Конфигурация источника данных для внешних источников Grails

Grails 1.x позволяет использовать внешние файлы конфигурации, устанавливая директиву grails.config.locations. Существует ли аналогичный подход для экстернализации конфигурации базы данных в Datasource.groovy(без настройки JNDI)?

Было бы полезно иметь возможность настроить учетные данные БД в простой файл конфигурации вне приложения.

Спасибо заранее!

4b9b3361

Ответ 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"
    ]

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