美文网首页DTeam团队日志
Grails3配置加载策略

Grails3配置加载策略

作者: 冯宇Ops | 来源:发表于2017-02-02 23:05 被阅读599次

Grails 3的官方配置文档对grails3加载配置的策略,以及覆盖策略提之甚少,有价值的参考信息太少。由于Grails3基于Spring-boot项目,因此通过更底层的Spring-boot的配置说明,可以得到很多有价值的信息。

详细的Spring-boot配置参考官方文档,这里仅罗列出几个重要的

改变应用程序的properties文件的路径

  • 在应用程序代码中显式指明@PropertySource
  • 设置spring.config.name这个system property(或SPRING_CONFIG_NAME环境变量)指定配置文件的主文件名, 默认application
  • 设置spring.config.location这个system property(或SPRING_CONFIG_LOCATION环境变量) 指明加载的文件路径(e.g. a classpath resource or a URL).单独设置一个环境配置文件,此配置可以被system properties, 环境变量,或命令行参数覆盖

无论程序运行于哪种environment配置下,Spring Boot总会按照上面描述的规则加载application.properties。如果有.yml后缀的yaml配置文件,也会一并加载进来。

Spring Boot的配置文件的log在DEBUG级别下会打印,在TRACE以上级别关闭打印。

使用短命令行参数覆盖

如果想使用--port=9000代替--server.port=9000覆盖默认的property属性,在application.properties文件使用占位符即可:

server.port=${port:8080}

这样也可以通过大写的环境变量PORT覆盖配置。

依赖环境的配置文件

依赖环境的配置文件可以起名application-${profile}.properties,这样spring boot通过-Dspring.profiles.activeSPRING_PROFILES_ACTIVE环境变量指定运行环境时就会加载对应的${profile}的配置文件。

Grails官方文档提及的方案

准确来说,Grails官方文档使用的方案是上述使用短命令行参数覆盖使用的方案(当然其他方案同样适用于Grails3,只不过官方文档没提)。

官方文档的范例如下:

production:
    dataSource:
        url: '${JDBC_CONNECTION_STRING}'

这里就代表这个dataSource.url的值希望通过system property(-DJDBC_CONNECTION_STRING命令行参数)或环境变量(JDBC_CONNECTION_STRING,环境变量可以覆盖默认properties官方文档没提)提供。并未提及实际还可以用'${JDBC_CONNECTION_STRING:DEFAULT_JDBC_STRING}'这种方式给定默认值。

对于gradle工程,官方提供的参考build.gradle配置文件:

bootRun {
    systemProperties = System.properties
}

test {
    systemProperties = System.properties
}

表示bootRun这个task(对应Grails的run-app)和test这个task(对应Grails的test-app)在运行的时候,将system properties传递给grails项目。

在gradle指定system properties的方法有两种:

  • 在gradle命令行上指定-Dproperty=value参数
  • gradle.properties文件中指定systemProp.property=value属性

参考资料

Grails3配置文档: http://docs.grails.org/latest/guide/conf.html
Spring Boot配置文档: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html

相关文章

  • Grails3配置加载策略

    Grails 3的官方配置文档对grails3加载配置的策略,以及覆盖策略提之甚少,有价值的参考信息太少。由于Gr...

  • MyBatis知识点总结

    配置(mybatis-config.xml)properties属性setting设置设置加载策略 直接加载 侵入...

  • 3.Ribbon负载均衡

    常见的负载均衡策略image.png 修改负载均衡策略 或者在配置类里重写IRule Ribbon饥饿加载ribb...

  • 图片加载框架

    1、基本要求 根据用户需求可以灵活配置(建造者模式)支持高并发,图片加载的优先级支持可以选择不同的加载策略,对加载...

  • 一文讲透Java核心技术之高可扩展利器SPI

    大家好,我是冰河~~ SPI的概念 JAVA SPI = 基于接口的编程+策略模式+配置文件 的动态加载机制 SP...

  • 关于图片加载优化相关方案 -- android,ios

    1、快速滑动图片加载性能优化方案 两种方案:1:加载策略2:手动控制 1.1、 加载策略 1):FIFO firs...

  • 实现账户安全(多元密码策略)

    组策略实现账户密码安全 密码策略常见配置 账户锁定策略常见配置 多元密码策略配置(方法一)【说明:优先级设置越小,...

  • hibernate中API

    Configuration 功能:配置加载类,用于加载主配置,orm元数据的加载 创建对象Configuratio...

  • 收藏的博客链接

    1 - 粒子动画效果2 - 预加载与智能预加载策略

  • SpringBoot 加载配置信息

    SpringBoot 加载配置信息 可以结合actuator实现热加载配置,或者 nacos也可以 配置文件

网友评论

  • f8d644754611:我在application.yml里配置:
    dataSource:
    url: '${JDBC_CONNECTION_STRING}'
    但我没有写这一句:
    bootRun {
    systemProperties = System.properties
    }
    然后在init目录下的Application.groovy里给变量JDBC_CONNECTION_STRING赋值:
    System.properties.setProperty("JDBC_CONNECTION_STRING", dbUrl)
    最终的结果是能够正常运行起来项目的
    环境:Grails 3.3.0
    冯宇Ops:另外那段blog的重点内容在于还可以直接添加默认值,这个在spring-boot是支持的,只不过grails文档没写
    冯宇Ops:纠正一下,bootRun默认是没有systemProperties=System.properties这一条的。你那个配置当然能生效,application.groovy是最后才加载的,并且一定会加载,这个是grails框架扩充的功能,在spring boot支持的properties和yaml配置之外,额外支持的groovy DSL配置。这个在grails的官方文档有说明。你完全可以在groovy DSL这个级别引入更多灵活的配置策略
    冯宇Ops:注意看我的blog,bootRun这个闭包是配置在build.gradle文件中的,这个是gradle的构建配置。grails生成的默认工程模板中已经有这一条了。./grailsw run-app对应到gradle的task就是bootRun,这个配置的作用就是在run-app的时候可以把system properties传递给grails程序(实际是底层的spring boot),以便覆盖默认配置,就可以实现grails run-app -DJDBC_STRING=jdbc://这样的方式覆盖

本文标题: Grails3配置加载策略

本文链接:https://www.haomeiwen.com/subject/unwrittx.html