grails - 没有读取外部配置值

标签 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"]
    }
} 

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

最佳答案

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

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"]

关于grails - 没有读取外部配置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25646197/

相关文章:

grails - 使用grail quartz 插件的多个调度程序

grails - 如何从另一个 Grails 插件配置 Grails 插件

Grails 默认包名

Grails - 在哪里放置测试文件以及如何加载它们

grails - gsp邮件插件自动发送

grails - 我如何配置Gradle 3.0的Gradle版本?

Grails3 + mysql不使用 Camel 表示法创建表名和列名

grails - 如何全局处理 Grails 中的 HTTP 错误(状态代码 4xx/5xx)?

sql - 使用GORM的动态FindAllBy方法时出现SQL错误-未设置#2

grails - 在 Grails 中对属性进行 HTML 编码时如何正确验证域类?