002-Spring Boot 配置

本文详细介绍了SpringBoot的配置加载顺序,包括默认属性、@PropertySource、配置文件、环境变量、Java系统属性、命令行参数以及测试配置。强调了命令行配置的覆盖优先级,并展示了如何禁用命令行属性加载。此外,还讨论了配置文件的应用,如application.properties和yml文件的使用,以及如何通过spring.profiles.active切换不同环境的配置。最后提到了属性占位符的使用,提高了配置的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

阅读本章,建议先阅读Spring Ioc 环境与配置。Spring Ioc 环境与配置中讲解了@PropertySource以及环境变量等的用法。

Spring Boot中的配置

  1. 默认属性(通过SpringApplication.setDefaultProperties指定的属性)
  2. @PropertySource加载的属性(Spring Ioc 环境与配置
  3. 配置数据(如application.properties、yml文件 – 这是我们最常用的配置文件的方式)
  4. 操作系统环境变量(如JAVA_HOME等)
  5. Java 系统属性 ( System.getProperties())
  6. 命令行参数(如:java -jar myproject.jar --spring.config.name=myproject)
  7. @TestPropertySource或测试配置文件(测试的配置虽然优先,但它仅在测试阶段可用)

以上只列出来我们常用的一些配置来源,不是全部

Spring Boot中按1~7的顺序依次覆盖同名属性。就是像我们在Spring Ioc 环境与配置一章中的示例,JAVA_HOME的属性配置,最终使用的是系统的环境变量,我们子Properties文件中的配置被覆盖掉了。

命令行属性

默认情况下,我们在执行命令运行Spring boot程序时,可以直接通过命令行添加属性配置。

$ java -jar app.jar --server.port=9090 --server.servlet.context-path=/test
-- 之后即是配置的属性名称,Spring boot会将他们加载到Spring Environment。

按照上面我们所说的覆盖顺序,命令行配置将覆盖我们常用的配置文件Properties或yml中的同名配置。

禁用命令行属性

命令行属性加载默认是启用的,如果你要禁用,请使用如下方式。

SpringApplication.setAddCommandLineProperties(false);

配置文件属性

配置文件就是我们常用的Properties配置文件或yml配置文件。

注意:properties和yml使用其一即可。如果有同名的properties文件和yml文件,那么Spring boot会优先使用properties。

application.properties和application.yaml

Spring boot会自动加载如下几个位置的application命名的配置文件。

  • 类的根路径(通常是我们的resources目录)
  • 类的路径下的config文件夹(通常为我们的resources/config)

修改默认的配置文件名称

使用spring.config.name命令行属性,如下:将application修改为myproject。Spring Boot 将默认加载myproject.properties或myproject.yml文件

$ java -jar myproject.jar --spring.config.name=myproject

直接指定加载的配置文件

通过spring.config.location直接执行要加载的配置文件,多个配置文件之间用因为逗号隔开

$ java -jar myproject.jar --spring.config.location=\
    optional:classpath:/default.properties,\
    optional:classpath:/override.properties

建议非必要情况下不要修改配置文件的默认名称。(约定优于配置)

使用profile加载配置文件

我们使用spring.profiles.active属性来加载对应profile的配置文件,这样我们就可以针对不同的部署环境加载不同的配置了。再结合maven的profile配置进行配置文件的打包如下:

  1. 在主配置文件application.properties文件中如下配置
spring.profiles.active=@profileActive@

# profileActive是我们maven中profile配置的属性名称
  1. maven的配置如下
<profiles>
        <profile>
            <id>dev</id>
            <properties>
                <profileActive>dev</profileActive>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <profileActive>test</profileActive>
            </properties>
        </profile>
    </profiles>

配置了2个profile环境,dev和test,而且默认使用dev环境

属性占位符

在我们的配置文件中,常常有多个属性的值类似,比如都有同一个前缀,每个属性都去配置一遍显得费事。这时候我们就可以使用属性占位符。

my.name = spring boot
my.say = Hello, ${my.name} 

最后my.sal的值即为Hello, spring boot

总结

本章只是介绍了部分我们常用的配置方式,也没有详细介绍properties配置与yml配置的注意事项。不过我们日常的开发中以上这些就基本够用了。
上一篇:Spring Boot HelloWorld
下一篇:Spring Boot配置绑定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值