深入理解SpringBoot(三)—— 配置

简介: 本文讲述了如何配置SpringBoot的配置文件

3 配置

3.1 属性配置

配置文件:我们从SpringBoot学习的前置知识可知,Spring的配置文件都是写在resources中。打开resources,映入眼帘的是一个名为application.properties的配置文件。

这正是SpringBoot项目的配置文件;在以前Spring的工程中,我们需要书写一堆的配置文件,但在SpringBoot的工程中,一切都被简化了。

image-20221006003516977

修改端口:我们知道,properties后缀的配置文件书写方式一般采用key:value的形式,试着在上面写端口的英文port,我们发现了提示,这正是我们寻求的配置文件,直接回车,按server.port:80的形式即可修改端口号为80。

image-20221006003703564

修改logo:logo实际上在设计层面不叫logo,而是叫banner;在配置文件中配置spring.main.banner-mode可以修改控制台中的banner,如设置off可以将控制台中的banner关闭,设置log可以将banner记录到日志中。

除此之外,使用spring.banner.image.location可以修改logo的形状。

image-20221006004346472

日志级别:使用loggin.level.root可以修改日志的等级,默认为info(提示)。

提示:在配置文件中可以配置的信息太多了,基本上无法记住和识别;实际上你也可以通过猜测来选中某一些配置来测试,但如果想要准确地使用配置,则需要去官网中查找官方文档中记载的所有配置信息。

官方配置文档Common Application Properties (spring.io)


3.2 配置文件分类

说明:除了application.properties,SpringBoot提供了多种属性的配置方式。

  • application.properties
  • application.yml(主流)
  • application.yaml

提示

  • 若同时存在三类配置文件,且配置文件中都配置了相同的配置,则优先级为properties>yml>yaml
  • 若IDEA没有识别出配置文件,则可以通过手动来添加;有绿叶子表示成功被识别,如果没有则按下图去手动添加。

image-20221006101729886

image-20221006101827110

步骤演示

  1. 在resources下创建一个application.yml,并且把原来的application.properties删除。

    image-20221006100845132

  2. 在resources下创建一个application.yaml,并且把原来的application.yml删除。

    image-20221006100936501

3.3 yaml文件

说明:YAML是一种数据序列化格式,该文件格式有两种扩展名:yml和yaml。

优点

  • 容易阅读
  • 容易与脚本语言交互
  • 以数据为核心,重数据轻格式

语法规则

  • 大小写敏感
  • 属性层级关系使用多行描述
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格
  • 属性值前面添加空格
  • \# 表示注释
  • 一个属性有多个值可以采用数组或对象,数据可以采用层级关系写法,对象也是

    like:
        - game
        - music
        - sleep
    # 相当于
    like: [game,music,sleep]
    
    user1:{
        name: zhangsan
        age: 18
    }
    # 相当于
    user1:
        -
            name:zhangsan
            age:18

字面值表示方式

image-20221006102703158


3.4 yaml数据读取

说明:使用@Value可以读取单个属性,属性名引用的方式必须采用SpEL表达式的方式来引用:${属性名}

步骤演示

  1. 编写配置文件

    country: china
    user:
      name: 'ArimaMisaki'
      age: 23
    hobby:
      - music
      - sing
    user1:
      -
        name: zhangsan
        age: 18
  2. 编写类

    package springboot_01_01_quickstart.controller;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/books")
    public class BookController {
        // 读取yaml数据中的单一数据
        // 使用Value注解,采用el表达式
        @Value("${country}")
        private String country1;
    
        // 层级关系读
        @Value("${user.name}")
        private String username;
        @Value("${user.age}")
        private Integer age;
    
        // 数组属性读取采用索引
        @Value("${hobby[0]}")
        private String hobby;
    
        // 对象属性读取采用.
        @Value("${user1[0].name}")
        private String user1Name;
    
        @GetMapping
        public String getById(){
            System.out.println("springboot is running");
            System.out.println("country1==>"+country1);
            System.out.println("username==>"+username);
            System.out.println("userAge==>"+age);
            System.out.println("hobby==>"+hobby);
            System.out.println("user1Name==>"+user1Name);
            return "springboot is running";
        }
    }
  3. 启动服务器,访问对应路径并查看控制台

    image-20221007143935617


3.5 配置文件中的变量引用

说明:如果在配置文件中的某个数据需要引用同文件中另一个数据,则采用SpEL表达式也可以做到引用的功能。

提示:yaml支持转义字符,但值必须用双引号包裹。

baseDir: c:\windows
tempDir: ${baseDir}\temp


3.6 读取yaml全部属性数据

说明:如果想要直接导入全部的配置文件数据,可以使用自动装配;具体方式是使用Enviromment类,并且加上@Autowired注解;在使用属性时,直接调Enviromment对象的getProperty方法,并传入对应属性读取的字符串,属性读取的方式和3.4中一致,但不需要再使用SpEL表达式。

package springboot_01_01_quickstart.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private Environment env;

    @GetMapping
    public String getById(){
        System.out.println("springboot is running");
        System.out.println(env.getProperty("country"));
        return "springboot is running";
    }
}


3.7 读取yaml引用类型数据

引入:在引入配置文件中的属性时,我们更希望读取文件的某个部分而不是文件中全部的属性。

说明:使用类将配置文件中的属性封装起来是一个不错的方式。

步骤演示

  1. 书写配置文件

    datasource:
      driver: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost/springboot_db
      username: root
      password: 123456
  2. 创建一个MyDataSource类,该类必须含有配置文件需要封装的对象的全部属性,否则报错;其次,该对象应该交由IOC管理,故加上注解Component;最后,我们需要配置其前缀,也就是说到时候调用属性的时候,调用driver是谁的driver?是datasource的driver,故我们要加上注解ConfigurationProperties("datasource")

    package springboot_01_01_quickstart;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    @Component
    @ConfigurationProperties("datasource")
    public class MyDataSource {
        private String driver;
        private String url;
        private String username;
        private String password;
    
        @Override
        public String toString() {
            return "MyDataSource{" +
                    "driver='" + driver + '\'' +
                    ", url='" + url + '\'' +
                    ", username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    '}';
        }
    
        public String getDriver() {
            return driver;
        }
    
        public void setDriver(String driver) {
            this.driver = driver;
        }
    
        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;
        }
    }
  3. 声明刚刚封装的数据对象,并使用@Autowired进行对象的自动装配。

    package springboot_01_01_quickstart.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.core.env.Environment;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import springboot_01_01_quickstart.MyDataSource;
    
    @RestController
    @RequestMapping("/books")
    public class BookController {
        @Autowired
        private MyDataSource myDataSource;
    
        @GetMapping
        public String getById(){
            System.out.println("springboot is running");
            System.out.println(myDataSource);
            return "springboot is running";
        }
    }
目录
相关文章
|
XML Java 测试技术
SpringBoot入门篇 01、Springboot入门及配置(二)
SpringBoot入门篇 01、Springboot入门及配置(二)
|
NoSQL 安全 Java
SpringBoot 自动配置的原理|学习笔记
快速学习 SpringBoot 自动配置的原理
181 0
SpringBoot 自动配置的原理|学习笔记
|
JSON NoSQL Java
Java--Redis-08-redis在SpringBoot中配置
在Spring Boot中,我们可以通过配置来自定义一个属于我们自己的RedisTemplate。
129 0
Java--Redis-08-redis在SpringBoot中配置
|
前端开发 Java Nacos
《SpringBoot系列三》:自定义配置时@Value和@ConfigurationProperties孰优孰劣?
《SpringBoot系列三》:自定义配置时@Value和@ConfigurationProperties孰优孰劣?
724 1
《SpringBoot系列三》:自定义配置时@Value和@ConfigurationProperties孰优孰劣?
|
Java 容器
SpringBoot2.x基础篇:谈谈SpringBoot内提供的这几种配置绑定
`SpringBoot`在不断地版本迭代中陆续提供了不同的配置参数绑定的方式,我们可以单独获取`一个配置参数`也可以将`一系列的配置`映射绑定到`JavaBean`的属性字段,下面我们来看看这几种方式的配置绑定哪一种是你最常用到的。
SpringBoot2.x基础篇:谈谈SpringBoot内提供的这几种配置绑定
|
XML JSON 开发框架
关于SpringBoot的自动配置和启动过程
关于SpringBoot的自动配置和启动过程
关于SpringBoot的自动配置和启动过程
|
存储 安全 网络协议
springboot 配置ssl 实现https访问
springboot 配置ssl 实现https访问
380 0
springboot 配置ssl 实现https访问
|
Java 应用服务中间件
springboot 中配置最大传输数据或上传文件的大小
springboot 中配置最大传输数据或上传文件的大小
springboot 中配置最大传输数据或上传文件的大小
|
缓存 搜索推荐 Java
《SpringBoot系列十五》源码+案例分析条件装配时多个Condition执行的顺序是什么样的?可以配置优先级吗?
《SpringBoot系列十五》源码+案例分析条件装配时多个Condition执行的顺序是什么样的?可以配置优先级吗?
221 0
《SpringBoot系列十五》源码+案例分析条件装配时多个Condition执行的顺序是什么样的?可以配置优先级吗?
|
运维 Java 数据库
《SpringBoot篇》03.超详细属性配置介绍
《SpringBoot篇》03.超详细属性配置介绍
168 0
《SpringBoot篇》03.超详细属性配置介绍