代码之家  ›  专栏  ›  技术社区  ›  Andrey Yaskulsky

grails外部配置值未读取

  •  1
  • Andrey Yaskulsky  · 技术社区  · 10 年前

    我想在应用程序中使用外部配置。我使用了邮件插件,并希望将其配置存储在外部.properties文件中。我更改了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.proproperties中定义的所有财产: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 回复  |  直到 10 年前
        1
  •  1
  •   Sikander    10 年前

    无法从财产文件加载映射。您应该使用.groovy文件而不是财产。 您可以从外部*.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"]