SpringBoot配置文件

🍁博客主页:👉不会压弯的小飞侠
✨欢迎关注:👉点赞👍收藏⭐留言✒
✨系列专栏:👉SpringBoot专栏
🔥欢迎大佬指正,一起学习!一起加油!

在这里插入图片描述


🍁介绍

  • springboot支持二种类型的配置文件
    • properties属性配置文件
    • yaml配置文件
  • 配置文件必须放置在项目的类加载目录下, 并且名字必须是application
  • springboot项目在运行的时候会自动加载这些配置文件

🍁属性配置文件

  • 使用配置文件配置连接池信息,并将配置文件中的内容读取到对象中
  • 编写配值文件,在 resource 文件夹下面新建 application.properties 配置文件
spring.jdbc.datasource.driverClassName=com.mysql.jdbc.driver
spring.jdbc.datasource.url=jdbc:mysql:///springboot
spring.jdbc.datasource.username=root
spring.jdbc.datasource.password=root
  • 新建 properties 包,创建类 DataSourceProperties
@Component
public class DataSourceProperties {

    @Value("${spring.jdbc.datasource.driverClassName}")
    private String driverClassName;
    @Value("${spring.jdbc.datasource.url}")
    private String url;
    @Value("${spring.jdbc.datasource.username}")
    private String username;
    @Value("${spring.jdbc.datasource.password}")
    private String password;

    public String getDriverClassName() {
        return driverClassName;
    }

    public String getUrl() {
        return url;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

    @Override
    public String toString() {
        return "DataSourceProperties{" +
                "driverClassName='" + driverClassName + '\'' +
                ", url='" + url + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

  • 编写Controller类
@RestController
public class HelloController {
    @Autowired
    private DataSourceProperties dataSourceProperties;

    @RequestMapping("/hello")
    public String index(){
        System.out.println(dataSourceProperties);
        return "Hello SpringBoot!!!";
    }

}

  • 启动启动类,进行测试(注意控制台输出信息)

在这里插入图片描述

🍁YAML配置文件

  • YAML是一种配置文件格式

  • 语法 :

    • 数据结构用树形结构呈现,通过缩进来表示层级,
    • 连续的项目通过减号 ” - ” 来表示
    • 键值结构里面的key/value对用冒号 ” : ” 来分隔。
    • YAML配置文件的扩展名是yaml 或 yml
  • 测试yml和properties配置文件哪个优先级比较高

  • 新建 application.yml 配置文件

spring:
  jdbc:
    datasource:
      driverClassName: com.mysql.jdbc.Driver
      url: jdbc:mysql:///springboot_test
      userName: root
      password: root
  • 启动测试,通过控制台输出信息可知,properties>yml

在这里插入图片描述

🍁多环境profile切换配置

  • spring boot项目中允许使用多个YAML配置文件。
  • 这些文件名称必须为application-***.yml,并且在application.yml中激活。
  • 创建application-dev.yml
spring:
  jdbc:
    datasource:
      driverClassName: com.mysql.jdbc.Driver
      url: jdbc:mysql:///springboot_dev
      userName: root
      password: root
  • 创建application-pro.yml
spring:
  jdbc:
    datasource:
      driverClassName: com.mysql.jdbc.Driver
      url: jdbc:mysql:///springboot_pro
      userName: root
      password: root
  • 在 application.yml 文件中添加如下配置,激活配置文件
spring:
  jdbc:
    datasource:
      driverClassName: com.mysql.jdbc.Driver
      url: jdbc:mysql:///springboot_test
      userName: root
      password: root

#配置使用哪个环境
  profiles:
    active: dev
  • 测试

在这里插入图片描述

  • 更改为pro环境进行测试
  profiles:
    active: pro

在这里插入图片描述

  • 如果properties和yml文件都存在,不存在spring.profiles.active设置,如果有重叠属性,默认以properties优先。
  • 如果设置了spring.profiles.active,并且有重叠属性,以active设置优先。
  • 可以在两种文件中分别增加server.port属性指定不同的端口,启动项目查看控制台端口号进行测试。

🍁@ConfigurationProperties批量注入

  • 这种注入方式,属性再多,只要按照规则就可以一次性自动注入
  • 创建类DataSourceConfigurationProperties
@Component
@ConfigurationProperties(prefix = "spring.jdbc.datasource") //批量注入
public class DataSourceConfigurationProperties {
    private String driverClassName;
    private String url;
    private String username;
    private String password;

    public String getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "DataSourceConfigurationProperties{" +
                "driverClassName='" + driverClassName + '\'' +
                ", url='" + url + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

  • 注意:
    • spring boot configuration annotation processor not configured 错误解决方案
  • 在pom.xml中增加如下依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

  • 可能会出现乱码,在setting -> editor -> file Encodings中修改编码,修改一下UTF-8,错误就可以解决了。

在这里插入图片描述

  • 在类上通过@ConfigurationProperties注解声明该类要读取属性配置

  • prefix=“spring.jdbc.datasource” 读取属性文件中前缀为spring.jdbc.datasource的值。前缀和属性名称和配置文件中的key必须要保持一致才可以注入成功

  • Spring Boot默认读取application.properties属性文件

  • 开启@ConfigurationProperties注解使用

@RestController
@EnableConfigurationProperties(DataSourceConfigurationProperties.class)
public class HelloController {
  
    @Autowired
    private DataSourceConfigurationProperties dataSourceConfigurationProperties;
    @RequestMapping("/hi")
    public String indexTwo(){
        System.out.println(dataSourceConfigurationProperties);
        return "Hello SpringBoot  dataSourceConfigurationProperties!!!";
    }

}

  • 输入请求地址进行测试

在这里插入图片描述
在这里插入图片描述