我想在我的应用程序中使用外部配置。与此同时,我使用邮件插件,并希望将其配置存储在外部.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个尝试不同的变种,但仍然没有解决方案。谢谢。
答案 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"]