2009-06-09 3 views
34

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

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

Заранее благодарен!

ответ

50

Вы можете использовать файл свойств, указанный в 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-приложение/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 и перезапускаю.

+0

Это похоже на то, что я был после! Спасибо за ваш четкий и краткий ответ, Джон :) – miek

+10

Это похоже на отличное решение, за исключением того, что у вас есть изменения после обновления. Для экстернализации конфигурации см. http://blog.zmok.net/articles/2009/04/22/playing-with-grails-application-configuration –

+0

Как отметил Брэд, это не жизнеспособное решение для развертывания войны , Ссылка, которую он публикует, является лучшим ответом. – Mike

24

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

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

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

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

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

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

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

Смежные вопросы