外化Grails数据源配置

mie*_*iek 36 configuration grails datasource external credentials

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

能够在应用程序外部的简单配置文件中配置数据库凭据将证明是有帮助的.

提前致谢!

Joh*_*ner 51

您可以使用grails.config.locations中指定的属性文件作为外部化数据源配置的方法.以下是我通常设置Grails项目的方法:

在我的DataSource.groovy中,我为生产环境指定了这个:

  ....
  ....
  production {
    dataSource {
        dbCreate = "update"
        driverClassName = "com.myorg.jdbcDriverNotExists"
        url = ""
        username = ""
        password = ""
    }
  }
  ....
  ....
Run Code Online (Sandbox Code Playgroud)

我在Config.groovy中指定了一个外部属性文件:

grails.config.locations = [ "classpath:app-config.properties"]
Run Code Online (Sandbox Code Playgroud)

在属性文件(存储在grails-app/conf /中)中,我指定了实际的数据源信息:

dataSource.driverClassName=oracle.jdbc.OracleDriver
dataSource.url=jdbc:oracle:thin:@host:port:sid
dataSource.username=sa
dataSource.password=secret
Run Code Online (Sandbox Code Playgroud)

我还使用属性文件来覆盖Config.groovy中的其他值.部署应用程序时,如果我必须修改数据源信息,我只需编辑/WEB-INF/classes/app-config.properties文件并重新启动.

  • 这看起来是一个很好的解决方案,除了你在升级后进行了编辑.有关外部化配置,请参阅http://blog.zmok.net/articles/2009/04/22/playing-with-grails-application-configuration (10认同)

Pet*_*ter 25

上面的答案并没有真正外化配置.他很接近,但配置仍然存在于应用程序中.我会在启动应用程序/服务器时使用JVM环境var指向外部配置所在的应用程序之外的位置.读取config.groovy文件中的环境var并使用它获取外部配置文件.像这样的东西:

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