grails / external configuration / grails.config.locations - 绝对路径文件“不存在”?

时间:2010-09-27 19:48:32

标签: configuration grails external

我正在尝试使用Grails的内置机制在部署的WAR文件之外加载外部配置文件(* .groovy和* .properties)。文档意味着只需将grails.config.locations设置为适当的classpath:file:路径。

我已将Config.groovy配置为:

String externalConfigLocation = System.getProperty("SYSTEM_PROPERTY_KEY")
if (!grails.config.locations || !(grails.config.locations instanceof List)) {
    grails.config.locations = []    
}
if (classpathExternalConfigLocation) {
    String pathToResource = "\"file:${basedir}" + File.separator + externalConfigLocation+"\""

    print "Loading external configuration file: ${pathToResource}\n"
    grails.config.locations << pathToResource
}

然而,这不起作用,错误消息指示文件“不存在”。但是,打印grails.config.locations中存储的绝对路径表示确实如此。我尝试了一些组合:

  • classpath:configurationFile.properties
  • file:c:\path_to_file\configurationFile.properties
  • c:\path_to_file\configurationFile.properties

但在所有这些情况下都无法找到该文件。

非常奇怪 - 建议表示赞赏。或者有关如何调试的建议。

2 个答案:

答案 0 :(得分:13)

这就是我通常做的事情:

grails.config.locations = ["classpath:${appName}-config.groovy",
                           "file:./${appName}-config.groovy"]
if (System.properties["${appName}.config.location"]) {
   grails.config.locations << "file:" + System.properties["${appName}.config.location"]
}

这允许我在项目根目录中放置一个文件,以便在部署为战争时在开发时使用文件:位置和服务器类路径中的文件来本地自定义属性。 Tomcat的lib文件夹位于其类路径中,因此如果您使用Tomcat,这是放置文件的好地方。通过将应用程序名称放在文件中,您可以拥有多个配置文件,而不会相互踩踏。

请务必将本地配置文件添加到svn:ignore或.gitignore,这样就不会将其检入源代码管理中。然后,每个开发人员都可以拥有自己的设置(或只使用默认设置),而不会影响其他人。

这是外部化数据库密码和其他生产值的好方法。应用程序部署者(理想情况下不是开发人员)管理文件及其内容,这样可以避免将密码签入源代码管理中。比使用JNDI IMO要好得多。

答案 1 :(得分:2)

我不认为你在战争中得到了base.dir