Вопрос

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

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

Заранее спасибо!

Это было полезно?

Решение

Вы можете использовать файл свойств, указанный в grails.config.locations, как способ экстернализации конфигурации источника данных.Ниже показано, как я обычно настраиваю проект Grails:

В моем DataSource.groovy я указываю это для производственной среды:

  ....
  ....
  production {
    dataSource {
        dbCreate = "update"
        driverClassName = "com.myorg.jdbcDriverNotExists"
        url = ""
        username = ""
        password = ""
    }
  }
  ....
  ....

Я указываю файл внешних свойств в моей конфигурации.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 и перезапускаю.

Другие советы

Приведенный выше ответ на самом деле не приводит к экстернализации конфигурации.Он близок, но конфигурация все еще находится в приложении.Я бы использовал переменную среды JVM при запуске приложения / сервера, чтобы указать на местоположение за пределами приложения, где находится внешняя конфигурация.Считайте переменную среды в файле config.groovy и используйте ее для получения внешнего файла конфигурации.Что- то вроде этого:

def extConfig = System.properties.getProperty('ENVVAR');
grails.config.locations = [ "file:${extConfig}/${appName}-config.groovy"]

Для меня это не работает.Чтобы получить переменную окружения.

Лучшее использование :

System.getenv().get("ENVVAR").toString()

Просто укажите местоположение файла конфигурации следующим образом в файле 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"
    ]

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top