当前位置: 首页 > news >正文

【第五篇】 SpringBoot中的高级配置

简介

        本文介绍了SpringBoot项目中的高级配置技巧,包括:1. 临时属性设置方法;2. 配置文件的4级分类及优先级规则;3. 自定义配置文件的两种实现方式;4. 多环境开发的3种实现方案。重点讲解了不同配置的优先级关系、加载顺序以及实际应用场景,还提供了配置分组、环境切换等实用技巧,帮助开发者更好地管理项目配置,提高开发效率。文章内容若存在错误或需改进的地方,欢迎大家指正!若对操作有任何疑问欢迎留言!非常感谢!

目录

一、设置临时属性

1、SpringBoot工程属性生效的优先级

2、命令行参数设置临时属性

3、IDEA下测试临时属性

(1)设置启动参数

(2)编程环境中设置启动参数

二、配置文件4级分类

注意

1、一级配置文件

2、二级配置文件

3、三级配置文件

4、四级配置文件

5、四种等级配置文件的作用

三、自定义配置文件

四、配置文件实现多环境开发

1、yaml单配置文件实现

2、多文件实现

(1)yaml文件实现

(2)properties文件实现

3、多环境开发独立配置文件书写技巧

4、多环境开发控制


一、设置临时属性

1、SpringBoot工程属性生效的优先级

        【Spring官网连接】Spring Boot 使用特定的 PropertySource 顺序,允许合理覆盖值:后加载的属性源可以覆盖先加载的属性源中的值

从上往下优先级逐渐升高,优先级高的配置能覆盖优先级低的配置。

属性源顺序如下:

1、默认属性(通过 SpringApplication.setDefaultProperties(Map) 设置)。

2、@Configuration 类上的 @PropertySource 注解。注意:此类属性源直到应用上下文刷新时才会添加到 Environment 中,因此无法用于配置某些提前读取的属性(如 logging.*spring.main.*)。

3、配置数据(如 application.properties 文件)。

4、RandomValuePropertySource(仅包含 random.* 属性)。

5、操作系统环境变量。

6、Java 系统属性(System.getProperties())。

7、JNDI 属性(来自 java:comp/env)。

8、ServletContext 初始化参数。

9、ServletConfig 初始化参数。

10、SPRING_APPLICATION_JSON 中的属性(嵌入在环境变量或系统属性中的内联 JSON)。

11、命令行参数。

12、测试中的 properties 属性(适用于 @SpringBootTest 和测试特定应用切片的注解)。

13、测试中的 @DynamicPropertySource 注解。

14、测试中的 @TestPropertySource 注解。

15、激活 DevTools 时,$HOME/.config/spring-boot 目录中的全局设置属性。

2、命令行参数设置临时属性

        通过Maven将SpringBoot程序打成jar包之后,然后在Windows环境下启动,需要在jar包所在路径下运行“java -jar xxxx.jar”,如果此时需要设置临时属性,那么只需要在命令的后面拼接“--临时属性”即可,临时命令的书写格式参照application文件的格式。若需要多个临时属性,那么就依次拼接即可。

        以修改启动端口号为9999为例:

3、IDEA下测试临时属性

(1)设置启动参数

        在IDEA的右上角进行修改项目启动参数,可以IDEA版本不一样,这个页面的按钮的位置不一样,但是最终页面的效果是一样的。

        然后在Edit Configuration Settings页面的Program arguments中配置需要的临时属性,格式为“--临时属性”,临时命令的书写格式参照application文件的格式。若需要多个临时属性,那么就依次拼接即可。

        若没有Program arguments框,可以点击Modify options然后勾选即可。

        测试

(2)编程环境中设置启动参数

        先还是在Program arguments框中配置一个“--server.port=9999”的参数,然后打印一下启动类的args参数。可以看到这个参数就是用于接收所配置的临时属性的,那么这样的话就可以在编程的时候向args数组中添加需要的临时属性。或者直接创建一个数组,然后里面设置一些属性,并将数组作为参数传递给run方法作为参数,一样可以实现效果。

        测试之前需要先把Program arguments框中设置的临时属性删除,然后再向数组中添加数据,并传递给run方法。

        若是在开发中,run方法是可以只接收一个参数的,可以不接收数组参数,如果不希望用户在外面通过临时属性覆盖程序配置的话,可以不接收这个参数,可以提高程序的安全性。

二、配置文件4级分类

注意

        配置文件级别越高,加载的时机越晚。若优先级高的配置文件与优先级低的配置文件的内容有冲突的话,最终会保留优先级高的配置文件的配置,而二者没有冲突的部分则最终会共存。

        同等级下的配置文件页可区分properties、yml、yaml等文件,不同的文件名后缀也同样具有优先级:properties>yml>yaml

        下面的说明将只以yaml文件为例

1、一级配置文件

        一级配置文件是优先级最低的文件,也就是创建工程时默认在resources目录下的配置文件。

2、二级配置文件

        在默认的resources目录下创建一个config目录,然后在config目录里面再创建一个application.yaml配置文件,这个配置文件就是二级配置文件。

3、三级配置文件

        将SpringBoot工程通过Maven打成jar包,然后在与jar包同层的目录下新建一个application.yaml配置文件,这个配置文件就是三级配置文件,就算工程中已经有了默认resources下的配置文件、config目录下的配置文件,这个配置文件的优先级依旧比前两者高。这个文件中也只配置了端口号为7777,可以运行一下jar包,看一下启动端口号。

4、四级配置文件

        在与jar包同层的目录下创建一个config目录,然后在config目录里面再创建一个application.yaml配置文件,这个配置文件就是四级配置文件,这个配置文件优先级最高。这个文件中只配置了端口号为6666,当四个配置文件同时存在的时候,可以运行一下jar包,看一下启动端口号。

5、四种等级配置文件的作用

一般场景

  • 1级服务于开发人员做本机开发与测试
  • 2级服务于项目经理整体调控
  • 3级服务于运维人员配置涉密线上环境
  • 4级服务于运维经理整体调控

三、自定义配置文件

        在项目中,不论那种等级的配置文件目前使用的文件名都是application,其实这个文件名称也是可以更改的。以一级配置文件为例,将application文件名改为demo。然后启动项目,可以看到默认是不生效的。

(1)使用临时属性指定文件名令配置文件生效

        在Edit Configuration Settings页面的Program arguments中配置“--spring.config.name=自定义文件名”临时属性,然后启动项目即可看到配置文件成功生效。

(2)使用临时属性指定配置文件路径令配置文件生效

        在Edit Configuration Settings页面的Program arguments中配置“--spring.config.location=classpath:/全自定义文件名”临时属性,然后启动项目即可看到配置文件成功生效。支持一次配置多个文件逗号分隔即可“--spring.config.location=classpath:/全自定义文件名,classpath:/全自定义文件名,... ...”。若指定了多个文件,多个文件中有相同的配置,那么后面的文件会覆盖前面的文件,不同的配置则会共存。

四、配置文件实现多环境开发

1、yaml单配置文件实现

        可以自行搜索一下yaml文件多文档模式,简单来说就是在yaml可以使用“---”作为分割符,然后一个“---”符号分割的就代表一个文档,这里的yaml配置文件实现多环境开发也就是用的这个特性,在yaml文件中使用多文档配置不同的属性,然后在指定使用哪个即可。最上面的成为主配置,主要配置一些公共配置,其余文档配置冲突属性。

        可以使用spring.profiles只不过现在显示过时了,可以使用spring.config.activate.on-profile代替。

2、多文件实现

(1)yaml文件实现

        单个文件实现会让文件内容变得及其繁琐,而且还不好维护,所以多文件模式就解决了这个问题。只需要新建application-环境名.yaml即可,然后在主文件主配置需要使用的文档。

(2)properties文件实现

        properties文件多环境配置仅支持多文件格式。

        单个文件实现会让文件内容变得及其繁琐,而且还不好维护,所以多文件模式就解决了这个问题。只需要新建application-环境名.properties即可,然后在主文件主配置需要使用的文档。

3、多环境开发独立配置文件书写技巧

使用功能对配置文件中的信息进行拆分,并制作成独立的配置文件,例如:

  • 数据库相关配置:application-devDB.yaml
  • 缓存相关配置:application-devRedis.yaml
  • MVC相关配置:application-devMVC.yaml

使用技巧

        示例前提:dev环境启动时需要依赖devDB和devMVC配置文件、pro环境启动时需要依赖proDB和proMVC配置文件、test环境启动时需要依赖testDB和testMVC配置文件。

(1)单文件使用

        在使用激活环境的情况下,使用include属性配置多个环境,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔。在控制台可以看到同时加载的环境,这个顺序是有意义的,主环境配置,这里也是dev永远都是最后一个加载的,前面的都是按照include的顺序加载,若有相同的配置,主配置会覆盖其他配置,其他配置的话会后加载的配置文件会覆盖前配置文件。

(2)多文件使用

        在上面的单文件使用中,如果需要需要在dev、pro、test环境之间频繁切换的话,include也需要跟着变动,假如include属性很多,那么就造成了一些维护成本,并且出问题的几率太高了,于是在SpringBoot2.4版本开始就出现了多文件的使用技巧,更加的便于维护。

        多文件使用其实就是使用group属性替代include属性,使用group属性定义多种主环境与子环境的包含关系,将所有需要include的配置进行分组,然后需要哪个分组直接引用哪个分组即可,降低了配置的书写量。

        有一点需要注意:就是多文件使用的时候的加载顺序发生了改变,主配置永远第一个,其他配置文件为group设置的顺序若有相同的配置,主配置会覆盖其他配置,其他配置的话会后加载的配置文件会覆盖前配置文件。

4、多环境开发控制

        多环境开发不仅可以在SpringBoot的配置文件中设置,还可以在Maven设置,而因为SpringBoot时依赖Maven而存在的,所以是以Maven的配置优先。

        使用技巧是,在Maven的pom文件中配置以下的配置,然后在配置文件中使用两个“@”符号进行引用,引用的内容是在Maven的properties属性中自定义的属性名称,然后使用Maven进行打包,打包成功之后可以解压一下jar包或者直看jar包,在BOOT-INF目录下的classes目录下有配置文件,然后查看配置文件内容,就被成替换了。

问题

        在项目中可能会有一种情况就是更换activation属性之后,然后进行Maven的打包,发现打完包的配置文件中调用的内容并没有发生改变,这个时候只需要执行以下Maven的compile一下,然后再打包就没有这个问题了。

相关文章:

  • 可编程幻彩LED灯条的设计
  • 3d世界坐标系转屏幕坐标系
  • 详解3DGS
  • JVM相关
  • 什么是智能体agent?
  • linux 新增驱动宏config.in配置
  • Python之Pandas
  • 【node.js】node.js 安装详细步骤教程【安装在D盘】
  • 计算机网络学习20250525
  • [Linux] 利用systemd实现周期性执行任务(DDNS设置案例)
  • 第五项修炼与系统思考
  • Java 虚拟机(JVM)原理与实战:打造高效稳定的运行环境
  • 【C语言】指针全局变量
  • PyTorch Image Models (timm) 技术指南
  • SRS流媒体服务器(7)源码分析之拉流篇
  • 进程守护服务优点
  • 《解锁Claude4:开启AI交互新体验》
  • SRS流媒体服务器之RTC播放环境搭建
  • 蓝桥杯单片机答题技巧
  • log日志最佳实践
  • 静态手机网站/北京seo推广系统
  • 驻马店阿里巴巴做网站/推荐6个免费国外自媒体平台
  • 滨州做网站的电话/5188关键词平台
  • 单位建设的网站属于无形资产吗/数字营销成功案例
  • 山东网站制作/产品市场推广方案范文
  • 网页设计图片轮播效果/关键词排名seo优化