问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

SpringBoot配置文件详解!

创作时间:
作者:
@小白创作中心

SpringBoot配置文件详解!

引用
CSDN
1.
https://blog.csdn.net/qq_56158663/article/details/146235023

一、什么是 Spring Boot 配置文件?

你可以把 Spring Boot 配置文件想象成一个“设置说明书”,告诉 Spring Boot 程序:

  • “嘿,数据库的地址是这个,用户名是这个,密码是这个!”
  • “嘿,端口号用 8080,别用默认的!”
  • “嘿,这个功能要开启,那个功能要关闭!”

简单来说,配置文件就是用来配置你的 Spring Boot 程序的各种参数的。这样做的好处是,你不用把这些参数硬编码到代码里,方便修改和维护。 比如,你想换个数据库,直接改配置文件就行,不用改代码重新编译。

两种常见的配置文件格式:properties 和 yml

Spring Boot 主要支持两种格式的配置文件:

  1. properties 文件:
  • 格式:键值对,用等号分隔。
  • 例子:
    server.port=8080
    spring.datasource.url=jdbc:mysql://localhost:3306/mydb
    spring.datasource.username=root
    spring.datasource.password=123456
    
  • 特点:简单直接,容易理解,但层级结构不明显。
  • 注意事项:
  • 转义字符:如果值中包含特殊字符,比如冒号或等号, 需要使用反斜杠进行转义。 例如:my.value=This is a\: test
  • 注释:使用 # 开头表示注释。
  • 编码:建议使用 UTF-8 编码,避免中文乱码问题。
  • 重复的 key:如果出现重复的 key,后面的值会覆盖前面的值。
  1. yml 文件 (或 yaml 文件):
  • 格式:使用缩进表示层级关系。
  • 例子:
    server:
      port: 8080
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/mydb
        username: root
        password: 123456
    
  • 特点:结构清晰,可读性好,适合配置复杂的参数。
  • 注意事项:
  • 缩进:缩进非常重要! 必须使用空格进行缩进,不能使用 Tab 键。 建议使用 2 个空格作为一级缩进。
  • 大小写敏感:key 是大小写敏感的。
  • 注释:使用 # 开头表示注释。
  • 字符串:字符串可以不用引号,但如果包含特殊字符或空格,建议使用单引号或双引号括起来。
  • 布尔值:可以使用 truefalse (不区分大小写),也可以使用 yesno
  • 空值:可以使用 null~ 表示空值。
  • 数组:可以使用 - 开头表示数组的元素。

总结一下:

  • properties 像是一张简单的表格,每一行都是一个配置项。
  • yml 像是一棵树,用缩进来表示配置项之间的关系。

Spring Boot 默认的配置文件名:
Spring Boot 默认会加载以下文件(按优先级从低到高):

  • application.propertiesapplication.yml:位于 src/main/resources 目录下。
  • application-{profile}.propertiesapplication-{profile}.yml:位于 src/main/resources 目录下,{profile} 是环境名称,比如 dev (开发环境), prod (生产环境)。 你可以通过设置 spring.profiles.active 来激活不同的环境配置文件。

二、如何从配置文件中获取值?

Spring Boot 提供了几种方式来获取配置文件的值:

  1. 使用 @Value 注解:
  • 场景:直接将配置值注入到类的字段中。
  • 例子:
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    @Component
    public class MyConfig {
        @Value("${server.port}") // 从配置文件中读取 server.port 的值
        private int serverPort;
        @Value("${spring.datasource.url}")
        private String datasourceUrl;
        public int getServerPort() {
            return serverPort;
        }
        public String getDatasourceUrl() {
            return datasourceUrl;
        }
    }
    
  • 解释:
  • @Value("${...}"):告诉 Spring 从配置文件中读取指定 key 的值。
  • serverPortdatasourceUrl 字段会自动被赋值。
  • ${...} 里面的内容就是配置项的 key,比如 server.port
  1. 使用 @ConfigurationProperties 注解:
  • 场景:将一组相关的配置项绑定到一个 Java Bean 中。
  • 例子:
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    @Component
    @ConfigurationProperties(prefix = "my.app") // 指定配置项的前缀
    public class MyAppConfig {
        private String name;
        private String version;
        private String author;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getVersion() {
            return version;
        }
        public void setVersion(String version) {
            this.version = version;
        }
        public String getAuthor() {
            return author;
        }
        public void setAuthor(String author) {
            this.author = this.author;
        }
    }
    
    my:
      app:
        name: My Awesome App
        version: 1.0
        author: John Doe
    
  • 解释:
  • @ConfigurationProperties(prefix = "my.app"):告诉 Spring 将所有以 my.app 开头的配置项绑定到这个 Bean 中。
  • name, version, author 字段会自动被赋值。
  • 注意:这个 Bean 必须要有 setter 方法,Spring 才能给字段赋值。
  1. 使用 Environment 对象:
  • 场景:动态获取配置值,或者获取一些系统环境变量。
  • 例子:
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.core.env.Environment;
    import org.springframework.stereotype.Component;
    @Component
    public class MyService {
        @Autowired
        private Environment environment;
        public String getDatabaseUrl() {
            return environment.getProperty("spring.datasource.url");
        }
    }
    
  • 解释:
  • @Autowired private Environment environment;:注入 Environment 对象。
  • environment.getProperty("spring.datasource.url"):从环境中获取 spring.datasource.url 的值。

三、如何从自定义配置文件中取值?

有时候,你可能需要使用自己的配置文件,而不是 application.propertiesapplication.yml。 比如,你想把一些敏感信息放在一个单独的文件里。

  1. 指定配置文件的位置:
  • 方式一:application.propertiesapplication.yml 中指定:
    spring.config.location=classpath:my-config.properties,file:/path/to/my-config.yml
    
    spring:
      config:
        location: classpath:my-config.properties,file:/path/to/my-config.yml
    
  • 解释:
  • spring.config.location:指定配置文件的位置。
  • classpath::表示从 classpath 中加载。
  • file::表示从文件系统中加载。
  • 多个配置文件用逗号分隔。
  • 方式二:使用命令行参数:
    java -jar myapp.jar --spring.config.location=classpath:my-config.properties,file:/path/to/my-config.yml
    
  1. 从自定义配置文件中取值:
  • 使用 @Value@ConfigurationPropertiesEnvironment 对象,和从 application.propertiesapplication.yml 中取值的方式一样。 Spring Boot 会自动加载你指定的配置文件,并将里面的配置项添加到环境中。

举个完整的例子:

  1. 创建自定义配置文件 my-config.properties

    my.custom.message=Hello from my custom config!
    
  2. application.properties 中指定自定义配置文件的位置:

    spring.config.location=classpath:my-config.properties
    
  3. 在 Java 代码中获取自定义配置文件的值:

    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    @Component
    public class MyService {
        @Value("${my.custom.message}")
        private String customMessage;
        public String getCustomMessage() {
            return customMessage;
        }
    }
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.stereotype.Component;
    @Component
    public class MyRunner implements CommandLineRunner {
        @Autowired
        private MyService myService;
        @Override
        public void run(String... args) throws Exception {
            System.out.println(myService.getCustomMessage()); // 输出:Hello from my custom config!
        }
    }
    

四、总结:

  • 配置文件是 Spring Boot 程序的重要组成部分,用于配置各种参数。
  • propertiesyml 是两种常见的配置文件格式,yml 更加结构化。
  • 可以使用 @Value@ConfigurationPropertiesEnvironment 对象从配置文件中获取值。
  • 可以通过 spring.config.location 指定自定义配置文件的位置。

希望这篇文章能够帮助你理解 Spring Boot 中的配置文件! 记住,多写代码,多实践,才能真正掌握这些知识。 加油!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号