2014-09-03 75 views
1

我想在我的应用程序中使用外部配置。随着它,我使用邮件插件,并希望将其配置存储在外部.property文件中。我chaged我的Config.groovy所以现在看起来对外部配置下USER_HOME/.grails/APP_NAME-configuration.properties:grails不读取外部配置值

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

正如你可以看到有哪些,如果测试语句是配置文件存在。每当我看到“*用户定义的配置文件*”消息时,它就存在于应用程序启动时。

我在开发模式下运行应用程序。经过我的邮件插件的构云:

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']表达式(在调试模式下)获得相应的属性。该表达式为所有mail.host,mail.port,mail.username和mail.password提供了适当的值。我也尝试使用grailsApplication.config ['property.name'](带有一对括号和'。'),但是这个变体不起作用。 有人可以帮我处理这种情况吗?我花了差不多3次尝试不同的变体,仍然没有解决方案。谢谢。

+0

外观像新的File()总是创建新文件 – 2014-09-03 13:57:51

+0

不,我检查 – 2014-09-03 13:59:27

+0

我认为grails.config.locations必须是config.groovy的最后一行,因此它可以覆盖所有内容 – 2014-09-03 14:00:46

回答

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