2014-09-03 51 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"]