Grails - grails.config.locations不适用于classpath和.properties文件

时间:2016-01-21 10:35:07

标签: grails log4j datasource grails-plugin grails-3.0

我正在使用Grails 2.5.3版本进行应用程序。我想外包数据库代码和Log4j部分。

Log4j的代码位于外部.groovy文件中。用户不会修改此文件,因此不必是/ classes目录中的属性文件。 在数据库代码的情况下,最好的是在外部属性文件中具有多个功能,因为它将继续作为/ classes目录中的属性文件。此外,DataSource.groovy与其余配置一起存在。

然后,我只完成了Log4j conf的工作:

grails.config.locations = ["file:./grails-app/conf/LogConfig.groovy"]

虽然我将文件放在/ grails-app / conf目录中,但classpath不起作用。这不起作用:

grails.config.locations = ["classpath:LogConfig.groovy"]

另外,我添加了两种情况(run-app和war模式)。但是,当我运行grails prod war并部署Tomcat时,Logconfig.groovy无法识别。

grails.config.locations = ["file:./grails-app/conf/LogConfig.groovy",
"classpath:LogConfig.groovy"]

在数据库代码的情况下,我没有实现.properties文件的工作。 我放在grails-app / conf中的这个文件及其包含的内容是:

# DB properties
dataSource.username = xxx
dataSource.password = xxx
dataSouce.driverClassName = xxx
environments.development.dataSource.url = jdbc:mysql://localhost/xxx
environments.test.dataSource.url = jdbc:mysql://localhost/xxx
environments.production.dataSource.url = jdbc:mysql://localhost/xxx

我已经阅读了很多教程和博客,但我不知道如何才能使用它。

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

我们如何在开发和生产模式中这样做。

var elems = document.getElementsByClassName("inventory");
for (var i = 0; i < elems.length; i++) {
  elems[i].href = "http://www.inspuratesystems.com/mandviwalla-motors/contact/";
}

grails-app目录中的Config.groovy:

your-application/
    conf/
        dev/
        qa/
        prod/
    grails-app/
        conf/
          Config.groovy

对于应用程序服务器(Tomcat,Websphere等)中的部署,您必须添加配置文件到CLASSPATH的目录。在类路径中有配置文件目录时,一切正常。

例如,我们运行Tomcat并使用启动脚本将配置目录导出到类路径。

对于Grails 3.x我写了对grails.config.locations的支持,因为他们删除了这个功能,我不想改变我们的配置方式。所以把你的grails.config.locations -configurations放到grails-app / conf -directory中的application.groovy。

environments {

    development {
        grails.logging.jul.usebridge = true

        grails.config.locations = [
          "file:conf/dev/XXXConfig.groovy",
          "file:conf/dev/XXXDataSource.groovy",
          "file:conf/dev/XXXLog4JConfig.groovy",
          "file:conf/dev/plugins/XXXSecurityConfig.groovy",
        ]        
    }
    production {
        grails.logging.jul.usebridge = false

        grails.config.locations = [
          "classpath:XXXConfig.groovy",
          "classpath:XXXDataSource.groovy",
          "classpath:XXXLog4JConfig.groovy",
          "classpath:plugins/XXXSecurityConfig.groovy",
        ]
    }
}

在您的grails-app / init文件夹中,您有Application.groovy

import org.grails.core.io.DefaultResourceLocator
import org.springframework.core.env.Environment
import grails.boot.config.GrailsAutoConfiguration
import org.springframework.core.env.MapPropertySource

class ApplicationConfigurationLoader {

    private ApplicationConfigurationLoader() {}

    public static load(GrailsAutoConfiguration application, Environment environment) {
        if (application && environment) {
            DefaultResourceLocator resourceLocator = new DefaultResourceLocator()
            def applicationGroovy = application.getClass().classLoader.getResource('application.groovy')
            if (applicationGroovy) {
                def applicationConfiguration = new ConfigSlurper(grails.util.Environment.current.name).parse(applicationGroovy)
                for (String configLocation in applicationConfiguration.grails.config.locations) {
                    def configurationResource = resourceLocator.findResourceForURI(configLocation)
                    if (configurationResource) {
                        def config = new ConfigSlurper(grails.util.Environment.current.name).parse(configurationResource.getURL())
                        environment.propertySources.addFirst(new MapPropertySource(configLocation, config))
                    }
                }
            }
        }
    }
}

答案 1 :(得分:0)

在我们的团队中,我们通常会输入conf / Config.groovy:

a[href$=jpg], a[href$=png] {
    text-decoration: none;
}

并指定具有特定名称PROJECT_NAME_CONFIG的环境变量,其中包含dev config f.e。的路径:

  

export PROJECT_NAME_CONFIG = / home / user / Documents / work / my_project / My_Project_Config.groovy

     

export PATH =&#34; $ PATH:$ PROJECT_NAME_CONFIG&#34;

示例My_Project_Config.groovy:

def ENV_NAME = "PROJECT_NAME_CONFIG"

grails.config.locations = [EventHandlers]

if (System.getenv(ENV_NAME)) {
    println "Loading configuration file founded in environment variable - " + System.getenv(ENV_NAME)
    grails.config.locations << "file:" + System.getenv(ENV_NAME)
}
else if (System.getProperty(ENV_NAME)) {
    println "Loading configuration from property: " + System.getProperty(ENV_NAME)
    grails.config.locations << "file:" + System.getProperty(ENV_NAME)
}