返回介绍

3.2 通过属性文件外置配置

发布于 2025-04-21 21:10:07 字数 2030 浏览 0 评论 0 收藏

在处理应用安全时,你当然会希望完全掌控所有配置。不过,为了微调一些细节,比如改改端口号和日志级别,便放弃自动配置,这是一件让人羞愧的事。为了设置数据库 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) 操作系统环境变量

(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。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。