将Grails数据源配置外部化

37

Grails 1.x允许通过设置grails.config.locations指令来使用外部配置文件。在Datasource.groovy中是否有类似的方法用于外部化数据库配置(而无需设置JNDI)?

能够在应用程序外部的简单配置文件中配置数据库凭据将非常有帮助。

提前感谢!

4个回答

53
您可以使用在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 文件并重新启动即可。


这看起来就是我想要的!谢谢你清晰简洁的回答,John :) - miek
11
除了升级后需要进行编辑之外,这看起来是一个很好的解决方案。要将配置外部化,请参阅http://blog.zmok.net/articles/2009/04/22/playing-with-grails-application-configuration。 - Brad Rhoads
正如Brad所指出的那样,这并不是部署war文件的可行解决方案。他发的链接是一个更好的答案。 - Mike
正如neomusashi所提到的,我认为这不是一个好的解决方案。通常情况下,您希望将应用程序配置放在应用程序包和源代码之外。 - hfm
一个小问题,如果我没有为数据源指定“properties”(重新连接的信息等),它们是否仍将从datasource.groovy获取? - Dany Y

25

上面的答案并没有真正地将配置外置。他接近了,但是配置仍然驻留在应用程序中。 我会在应用程序/服务器启动时使用JVM环境变量来指向应用程序外部存放配置文件的位置。在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"
    ]

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接