不读取grails外部配置值

时间:2014-09-03 13:53:10

标签: grails grails-2.0 grails-plugin

我想在我的应用程序中使用外部配置。与此同时,我使用邮件插件,并希望将其配置存储在外部.property文件中。我已经查询了我的Config.groovy,现在它在USER_HOME / .grails / APP_NAME-configuration.properties下查找外部配置:

environments {
    development {
        grails.logging.jul.usebridge = true
        if (new File("${userHome}/.grails/${appName}-config.properties").exists()) {
            println "*** User defined config ***"
            grails.config.locations = ["file:${userHome}/.grails/${appName}-config.properties"]
        }
    }
       .....
}

正如您所看到的,if语句是哪个测试是配置文件存在。它存在于每次我看到" *用户定义的配置* "应用程序启动时的消息。

我在开发模式下运行应用程序。在我的邮件插件的配置之后:

grails {
    mail {
        host = grailsApplication.config['mail']['host']
        port = grailsApplication.config['mail']['host']
        username = grailsApplication.config['mail']['username']
        password = grailsApplication.config['mail']['password']
        props = ["mail.smtp.auth": "true",
                "mail.smtp.socketFactory.port": "465",
                "mail.smtp.socketFactory.class": "javax.net.ssl.SSLSocketFactory",
                "mail.smtp.socketFactory.fallback": "false"]
    }
} 

当我尝试使用电子邮件插件发送消息时,似乎电子邮件插件的配置未初始化 - username,password = null和host,port具有默认值(localhost和-1)。所以在我看来,config.properties文件根本就没有加载。我决定检查是否已加载config.properties并发现grailsApplication.config对象包含我在config.properties中定义的所有属性:mail.host,mail.port,mail.username,mail.password。我检查了是否可以使用grailsApplication.config [' property'] [' name']表达式(在调试模式下)获取相应的属性。此表达式为所有mail.host,mail.port,mail.username和mail.password提供了适当的值。我还尝试使用grailsApplication.config [' property.name'](带有一对括号和'。')但这个变体不起作用。 有人可以帮我处理这种情况吗?我花了差不多3个尝试不同的变种,但仍然没有解决方案。谢谢。

1 个答案:

答案 0 :(得分:1)

您无法从.properties文件加载地图。您应该使用.groovy文件而不是.properties。 您可以从外部* .groovy文件加载配置,您可以在其中创建地图等。创建一个包含以下内容的文件...

grails {
    mail {
        host = smtp.gmail.com
        port = 465
        username = username
        password = password
        props = ["mail.smtp.auth"                  : "true",
                 "mail.smtp.socketFactory.port"    : "465",
                 "mail.smtp.socketFactory.class"   : "javax.net.ssl.SSLSocketFactory",
                 "mail.smtp.socketFactory.fallback": "false"]
    }
}

在config.groovy中使用它,

grails.config.locations = ["classpath:mail-config.groovy"]
相关问题