Configuration 外部化Grails数据源配置

Configuration 外部化Grails数据源配置,configuration,grails,datasource,external,credentials,Configuration,Grails,Datasource,External,Credentials,Grails1.x允许通过设置Grails.config.locations指令来使用外部配置文件。在Datasource.groovy中是否有类似的方法可用于外部化数据库配置(无需设置JNDI) 事实证明,能够在应用程序外部的简单配置文件中配置DB凭据会很有帮助 提前谢谢 您可以使用grails.config.locations中指定的属性文件作为外部化数据源配置的方法。下面是我通常如何设置Grails项目的: 在我的DataSource.groovy中,我为生产环境指定了以下内容: ..

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

事实证明,能够在应用程序外部的简单配置文件中配置DB凭据会很有帮助


提前谢谢

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

上述答案并没有真正将配置外部化。他很接近,但配置仍驻留在应用程序中。 我将在应用程序/服务器启动时使用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"
    ]

并将有关datasource和其他配置值的所有详细信息放入相应的文件中。因此,您可以将配置外部化,无需重新启动即可更改值。

这看起来就像我所追求的一样!谢谢你简洁明了的回答,约翰:)这看起来是一个很好的解决方案,只是升级后你确实需要编辑。对于外部化配置,正如Brad指出的,这不是部署战争的可行解决方案。他发布的链接是一个更好的答案。正如新武藏所提到的,我认为这不是一个好的解决方案。通常,您希望应用程序配置位于应用程序包和源代码之外。一个小问题是,如果我没有为数据源指定“属性”(重新连接的信息,…),它们还会从datasource.groovy中获取吗?