2009-06-09 80 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" 
    ] 

,并把所有有关的数据源和其他配置值的细节在适当的文件。因此,您可以将配置外部化,无需重新启动即可更改值。