2009-06-09 78 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-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文件並重新啓動即可。

+0

這看起來就像我以後一樣!感謝您清晰簡潔的回答,約翰:) – miek 2009-06-10 07:11:26

24

上面的答案並不真正使配置具體化。他很近,但配置仍在應用程序中。 我將在啓動應用程序/服務器時使用JVM環境var,以指向外部配置所在應用程序之外的位置。讀取config.groovy文件中的environment var並使用它獲取外部配置文件。這樣的事情:

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" 
    ] 

,並把所有有關的數據源和其他配置值的細節在適當的文件。因此,您可以將配置外部化,無需重新啓動即可更改值。