grails数据库配置的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grails数据库配置的问题相关的知识,希望对你有一定的参考价值。

按照网上说的
import org.springframework.core.io.ClassPathResource
import org.springframework.core.io.support.PropertiesLoaderUtils

def properties = PropertiesLoaderUtils.loadProperties(new ClassPathResource("datasource.properties").path)

在编译的时候报错
Error loading DataSource.groovy: class path resource [DataSource.properties] cannot be opened because it does not exist
DataSource.properties在config目录下面,名称没问题

参考技术A 把改配置文件放在编译文件里面 就好了 参考技术B 你想实现什么功能呢?导入Java旧系统中的类?追问

用datasource.properties来配置数据库也样的话,在生成war后照样可以直接修改数据库的连接配置

追答

我觉得Grails默认开发、测试和生产的配置已经可以满足大部分需求了,你的需求还是比较有意思的

本回答被提问者采纳

外部化 Grails 数据源配置

【中文标题】外部化 Grails 数据源配置【英文标题】:Externalizing Grails Datasource configuration 【发布时间】:2010-11-01 11:48:06 【问题描述】:

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

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

提前致谢!

【问题讨论】:

【参考方案1】:

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

【讨论】:

这看起来正是我所追求的!谢谢你简洁明了的回答,约翰 :) 这看起来是一个很好的解决方案,除了升级后您确实有编辑。外部化配置见blog.zmok.net/articles/2009/04/22/… 正如布拉德指出的那样,这不是部署战争的可行解决方案。他发布的链接是一个更好的答案。 正如 neomusashi 所说,我认为这不是一个好的解决方案。通常您希望在应用程序包和源代码之外进行应用程序配置。 一个小问题,如果我不为数据源指定“属性”(重新连接的信息,...),它们仍然会从 datasource.groovy 中获取吗?【参考方案2】:

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

def extConfig = System.properties.getProperty('ENVVAR');
grails.config.locations = [ "file:$extConfig/$appName-config.groovy"]

【讨论】:

【参考方案3】:

对我来说这行不通。获取环境变量。

更好的使用:

System.getenv().get("ENVVAR").toString()

【讨论】:

【参考方案4】:

只需将配置文件位置如下放在 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"
    ]

并将有关数据源和其他配置值的所有详细信息放入适当的文件中。因此,您可以将配置外部化,而无需重新启动来更改值。

【讨论】:

以上是关于grails数据库配置的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何从 grails 3.1.8 中的外部文件加载数据源配置?

我可以在没有数据源的情况下配置 Grails 吗?

有没有办法在 Grails 中配置对数据库的两个不同模式的访问?

如何从grails 3.1.8中的外部文件加载数据源配置?

使用“gradle test”测试 Grails 3 应用程序使用错误的环境配置

配置gsp网页后如何编译grails程序?