我开始使用现有的Grails项目,这是处理外部配置文件的配置文件(Config.groovy)的一部分:
grails.config.locations = [];
def defaultConfigFile = "${basedir}/configs/BombayConfig.groovy"
def defaultDatasourceFile = "${basedir}/configs/BombayDataSource.groovy"
if(File.separator == "\\") {
defaultConfigFile = defaultConfigFile.replace('/', '\\')
defaultDatasourceFile = defaultDatasourceFile.replace('/', '\\')
}
String PROJECT_NAME = "BOMBAY"
String CONFIG_ENV = "${PROJECT_NAME}_CONFIG_LOCATION"
String DATASOURCE_ENV = "${PROJECT_NAME}_DATASOURCE_LOCATION"
def externalConfig = System.getenv(CONFIG_ENV)
def externalDataSource = System.getenv(DATASOURCE_ENV)
if (externalConfig && new File(externalConfig).isFile()) {
grails.config.locations << "file:" + externalConfig
}
else {
grails.config.locations << "file:" + defaultConfigFile
}
if (externalDataSource && new File(externalDataSource).isFile()) {
grails.config.locations << "file:" + externalDataSource
}
else {
grails.config.locations << "file:" + defaultDatasourceFile
}
我在configs文件夹中有一些默认文件,但在服务器中,正在使用的文件位于:
/home/someusername/configuration/
看起来不像默认路径,并且没有环境变量指向该路径,如配置所示。
我还试图查找链接到其他配置文件夹的configs文件夹,但没有找到任何内容。
我迷失在这里;如何将配置文件指定给Grails?
编辑: 为了澄清事情,服务器正在运行并运行,我只想弄清楚它是如何从上面指定的路径中获取配置文件的。
答案 0 :(得分:1)
我认为您的意图是使用grails.config.locations []条目。我的Config.groovy
中注释了以下内容// grails.config.locations = [ "classpath:${appName}-config.properties",
// "classpath:${appName}-config.groovy",
// "file:${userHome}/.grails/${appName}-config.properties",
// "file:${userHome}/.grails/${appName}-config.groovy"]
所以你不能指定这样的东西:
grails.config.locations = [ "file:${userHome}/configuration" ]
拾取该文件夹中的文件?
答案 1 :(得分:1)
if(File.separator == "\\") {
defaultConfigFile = defaultConfigFile.replace('/', '\\')
defaultDatasourceFile = defaultDatasourceFile.replace('/', '\\')
}
这可能会导致问题 - grails.config.locations
是 URL 的列表,而不是本机文件路径,因此您肯定需要转发,而不是反向斜杠。而是尝试像
File defaultConfigFile = new File(basedir, "configs/BombayConfig.groovy")
// and the same for datasource
// ...
File externalConfig = System.getenv(CONFIG_ENV) ? new File(System.getenv(CONFIG_ENV)) : null
if (externalConfig?.isFile()) {
grails.config.locations << externalConfig.toURI().toString()
}
else {
grails.config.locations << defaultConfigFile.toURI().toString()
}
答案 2 :(得分:1)
如果你正在努力与外部配置和你 在Config.groovy
中指定了外部配置grails.config.locations = []
if(System.properties["${appName}.config.location"]) {
grails.config.locations << "file:" + System.properties["${appName}.config.location"]
}
if(System.properties["${appName}.datasource.config.location"]) {
grails.config.locations << "file:" + System.properties["${appName}.datasource.config.location"]
}
您的设置环境就是这样
export GRAILS_OPTS="$GRAILS_OPTS -DAppName.config.location=dev-config/Config.groovy"
export GRAILS_OPTS="$GRAILS_OPTS -DAppName.datasource.config.location=dev-config/DataSource.groovy"
并且开发配置没有被提取,那么你需要在BuildConfig.groovy中查看你的fork设置并将它们关闭如此
grails.project.fork = [
test: false,
run: false,
]
这样,当应用程序分叉时,系统属性不会丢失。