假设我有一个名为myCoolApp
的Grails应用程序。
此外,假设我在grails-app/conf/Config.groovy
和grails-app/conf/DataSource.groovy
个人资料下的test
和production
中定义了一些基本属性。
Config.groovy
设置为与以下.groovy
外部配置文件合并,如果找到则:
grails.config.locations = ["file:${userHome}/.grails/${appName}-config.groovy"]
最后,我还在外部测试服务器中定义了这样一个文件,在本地* NIX用户路径下:
/home/appServerTestUser/.grails/myCoolApp-config.groovy
可悲的是,我发现由于某种原因,当Tomcat实例启动时,外部.groovy
文件的属性没有被合并。
/home/appServerTestUser/.grails/myCoolApp-config.groovy
"这些是我合并到Config.groovy
?谢谢!
答案 0 :(得分:2)
基于文件的路径在部署的应用中没有多大意义。它可以在您的开发机器上进行部署以进行测试时使用,但可能会在任何其他计算机上失败。即使配置了正确的路径,它也可能在本地失败,因为该过程将像另一个低权限用户一样运行。
您可以使用绝对路径,例如/etc/myapp/path/to/file
,但这往往会将部署与文件系统结构相结合,因此如果您在Windows中开发并在Linux上部署,那么让它们都能正常工作会很棘手。
因此,Tomcat部署的最佳选择是使用类路径语法。您可以指定多个文件,它将加载它找到的所有文件,因此我通常有一个用于本地开发的条目和一个用于已部署的应用程序:
grails.config.locations = [
"classpath:${appName}-config.groovy",
"file:./${appName}-config.groovy"
]
我删除.properties文件的条目,因为Groovy语法更灵活,但如果你愿意,可以使用它们。我还将dev文件保存在项目根目录中(并从源代码控制中排除)。
因此,在部署时,请正确命名文件(不同的应用程序将具有不同的文件,因此不会发生冲突)并将它们放在Tomcat的lib目录中。这是在类路径中,因此classpath:
条目将会看到它。