spring boot 自定义配置优先级问题

3.2 通过属性文件外置配置 
在处理应用安全时,你当然会希望完全掌控所有配置。不过,为了微调一些细节,比如改改 端口号和日志级别,便放弃自动配置,这是一件让人羞愧的事。为了设置数据库URL,是配置一 个属性简单,还是完整地声明一个数据源的Bean简单?答案不言自明,不是吗? 事实上,Spring Boot自动配置的Bean提供了300多个用于微调的属性。当你调整设置时,只 要在环境变量、Java系统属性、JNDI(Java Naming and Directory Interface)、命令行参数或者属 性文件里进行指定就好了。 要了解这些属性,让我们来看个非常简单的例子。你也许已经注意到了,在命令行里运行阅 读列表应用程序时,Spring Boot有一个ascii-art Banner。如果你想禁用这个Banner,可以将 spring.main.show-banner属性设置为false。有几种实现方式,其中之一就是在运行应用程 序的命令行参数里指定: 
$ java -jar readinglist-0.0.1-SNAPSHOT.jar --spring.main.show-banner=false 另一种方式是创建一个名为application.properties的文件,包含如下内容: 
spring.main.show-banner=false 或者,如果你喜欢的话,也可以创建名为application.yml的YAML文件,内容如下: 
spring:   main:     show-banner: false 还可以将属性设置为环境变量。举例来说,如果你用的是bash或者zsh,可以用export命令:
 
$ export spring_main_show_banner=false 请注意,这里用的是下划线而不是点和横杠,这是对环境变量名称的要求。 实际上,Spring Boot应用程序有多种设置途径。Spring Boot能从多种属性源获得属性,包括 如下几处。 (1) 命令行参数 (2) java:comp/env里的JNDI属性 (3) JVM系统属性 (4) 操作系统环境变量 
50  第 3章 自定义配置 
 
(5) 随机生成的带random.*前缀的属性(在设置其他属性时,可以引用它们,比如${random. long}) (6) 应用程序以外的application.properties或者appliaction.yml文件 (7) 打包在应用程序内的application.properties或者appliaction.yml文件 (8) 通过@PropertySource标注的属性源 (9) 默认属性 这个列表按照优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先 级的相同属性。例如,命令行参数会覆盖其他属性源里的属性。 application.properties和application.yml文件能放在以下四个位置。 (1) 外置,在相对于应用程序运行目录的/config子目录里。 (2) 外置,在应用程序运行的目录里。 (3) 内置,在config包内。 (4) 内置,在Classpath根目录。 同样,这个列表按照优先级排序。也就是说,/config子目录里的application.properties会覆盖 应用程序Classpath里的application.properties中的相同属性。 此外,如果你在同一优先级位置同时有application.properties和application.yml,那么application. yml里的属性会覆盖application.properties里的属性。 禁用ascii-art Banner只是使用属性的一个小例子。让我们再看几个例子,看看如何通过常用 途径微调自动配置的Bean。 

你可能感兴趣的:(spring,boot)