第二章 Spring Boot快速⼊⻔ —— Spring Boot配置文件

前言:

在Spring Boot中配置文件用于配置各种属性、参数和设置的重要文件;配置文件有两种不同的格式,一个是properties,另一个是yaml(简写yml)。虽然properties文件比较常见,但是相对于properties而言,yaml更加简洁明了,而且使用的场景也更多,基本现在项目都是使用yaml进行配置。除了简洁,yaml还有另外一个特点,就是yaml中的数据是有序的,properties中的数据是无序的,在一些需要路径匹配的配置中,顺序就显得尤为重要(例如我们在Spring Cloud Zuul中的配置),此时我们一般采用yml。

一:配置文件类型

  • bootstrap.properties(或bootstrap.yml):用于在Spring Boot应用程序启动时加载的属性文件,主要用于配置一些优先级较高的属性,如应用程序的上下文路径、端口号等。这些属性在应用程序启动过程中会被优先加载。
  • application.properties:基于键值对的配置文件,可以在其中设置各种属性值。这是Spring Boot项目中默认的配置文件类型。
  • application.yaml(或者application.yml):基于YAML格式的配置文件,相比properties文件更加简洁易读,支持层次化结构。YAML文件以冒号分隔键值对,并支持缩进表示层级关系。
  • application-{profile}.properties或application-{profile}.yml:针对不同的环境(如开发、测试、生产等),可以使用不同的配置文件。其中,{profile}代表特定的环境名称,如application-dev.properties用于开发环境,application-prod.yml用于生产环境。

1.properties基于键值对:

2.yml文件层次结构:

二:文件名名称

配置文件的名称不一定叫application,可以自定义配置文件名称,一般项目中有些额外的配置会自定义文件名称,例如在resources目录下创建一个demo.yml文件

使用的时候也非常简单,使用注解@PropertySources引入即可

三:配置文件的加载顺序和优先级

spring Boot在启动时会自动加载配置文件,并按照一定的顺序和优先级进行合并。具体的加载顺序和优先级如下:

  1. 命令行参数:启动应用时传入的命令行参数具有最高的优先级,可以覆盖其他所有配置。
  2. 系统环境变量:系统环境变量中的配置也具有较高的优先级,可以覆盖application.properties或application.yml文件中的配置。
  3. Java系统属性:通过System.getProperties()方法获取的Java系统属性也可以作为配置来源。
  4. 注解设置的属性文件:通过@PropertySource注解指定的属性文件也可以被加载。
  5. 启动类设置的默认属性:通过SpringApplication.setDefaultProperties方法设置的默认属性。
  6. application-{profile}.properties或application-{profile}.yml:针对特定环境的配置文件。
  7. application.properties或application.yml:默认的全局配置文件。

四:使用配置文件

1.常规使用示例

复制代码
server:
  port: 8001
  
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

2.数组配置示例

yml配置:

复制代码
demo:
  test:
    - 1
    - 2
    - 3

读取配置

复制代码
@Component
@ConfigurationProperties(prefix = "demo")
public class TestProperties {
    private List<String> tests;
 
    public List<String> getTests() {
        return items;
    }
 
    public void setTests(List<String> tests) {
        this.tests= tests;
    }
}

controller测试

复制代码
@RestController
public class TestController {
 
    @Autowired
    private TestProperties testProperties ;
 
    @GetMapping("/items")
    public List<String> getTests() {
        return testProperties.getTests();
    }
}

3.集合配置示例

yml配置:

复制代码
demo:
  test:
    names:
      - 测试1
      - 测试2
      - 测试3

读取配置:

复制代码
@Component
@ConfigurationProperties(prefix = "demo.test")
public class TestProperties {
    private Set<String> names;
 
    // Getter 和 Setter 方法
    public Set<String> getNames() {
        return names;
    }
 
    public void setNames(Set<String> names) {
        this.names = names;
    }
}

controller测试

复制代码
@RestController
public class TestController {
 
    @Autowired
    private TestProperties testProperties ;
 
    @GetMapping("/names")
    public List<String> getNames() {
        return testProperties.getNames();
    }
}

注意事项:

  1. 配置文件格式:确保配置文件的格式正确,例如YAML文件中的缩进和冒号使用。
  2. 前缀匹配 :在配置类和控制器中,使用@ConfigurationProperties注解时,要确保前缀与配置文件中的键匹配。
  3. 数据类型:确保配置文件中的数据类型与配置类中定义的字段类型一致。
  4. 环境区分 :对于不同环境(如开发、测试、生产),可以使用不同的配置文件(如application-dev.ymlapplication-prod.yml)来区分配置。

通过合理使用Spring Boot的配置文件,可以方便地管理应用程序的各种配置信息,提高代码的可维护性和灵活性。

相关推荐
胖纳特8 小时前
Seafile 文件预览增强方案:集成 BaseMetas Fileview 突破格式限制
前端·后端
梵得儿SHI8 小时前
Vue 3 工程化实践:多页面路由配置 + Pinia 状态管理完全指南
前端·javascript·vue.js·vuerouter4·pinia状态管理的·模块化store设计·路由与状态管理
lxh01138 小时前
电话号码的字母组合
java·javascript·算法
小李子呢02118 小时前
为什么会有react和vue这些框架的出现
前端·vue.js·react.js
军训猫猫头8 小时前
7.带输入参数的线程启动 C# + WPF 完整示例
开发语言·前端·c#·.net·wpf
CodeSheep8 小时前
同事偷偷给我介绍私活,说1万报酬全给我,结果甲方私下告诉我说,同事在当中白拿了2万,我觉得被耍了,媳妇却让我要知足,说我一点不亏
前端·后端·程序员
爱学习的小可爱卢8 小时前
算法—Java Map 核心方法与实战场景指南
java·开发语言·算法
Betelgeuse768 小时前
告别传统 ModelForm:用 React 与 DRF 打造现代化项目管理表单
前端·react.js·django·前端框架
豆豆8 小时前
建站系统怎么选?2026年SaaS平台与开源CMS对比分析
java·开发语言·开源·cms·网站建设·网站制作·网站开发
IT_陈寒8 小时前
SpringBoot这个"自动配置"差点让我加班到凌晨
前端·人工智能·后端