目录

  • 一、认识SpringBoot配置文件
  • 二、properties配置文件
  • 1、添加配置
  • 2、读取配置文件
  • 三、yml文件
  • 添加配置和读取
  • 1. 普通的配置信息
  • 2. 配置不同的数据类型
  • 3. 配置对象
  • 4. 配置集合


SpringBoot配置文件,整个项目中所有的重要数据都是在配置文件中配置的

一、认识SpringBoot配置文件

1、SpringBoot配置文件的作用:

  1. 数据库的连接信息(url、用户名、密码)
  2. 项目的启动端口
  3. 第三方系统的调用密钥等信息
  4. 日志

配置文件中的信息,一部分是给系统用的(如启动端口);一部分是给业务代码用的(如数据库的连接信息、第三方系统的调用密钥等)
配置文件中的信息,是以键值对的形式(key和value)组织的,key的命名一部分是系统提供的(如server.port、spring.database等),一部分是用户自定义的(如配置不同的数据类型、对象、集合)

2、SpringBoot配置文件的格式:

  1. .properties
  2. .yml

3、关于两种格式

  1. SpringBoot约定,SpringBoot启动时,只有名字为 application.properties / application.yml 的配置文件,会被直接读取,其他名字的配置文件不会读取(但是使用其他名字的配置文件也是合法的配置文件)
  2. .properties是旧版,.yml是新版;当 .properties 和 .yml 同时存在于同一个项目中时,如果两个文件中有同样的配置(如都设置了server.port),那么以 .properties 中的配置为主( .properties 配置文件的优先级最高,但加载完 .properties 文件后,也会加载 .yml 文件)

二、properties配置文件

1、添加配置

使用键值对的方式添加配置,key=value
千万不要随便加空格

application.properties 文件

# 系统提供的key
# 设置端口号
server.port=9999

# 系统提供的key
# 设置数据库信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/manageplayers
spring.datasource.username=root
spring.datasource.password=123456

# 用户自定义的key、value
college=弘毅拓新
需要注意的是,.properties文件 中使用中文时,需要将 .properties文件 的默认字符编码方式设置为 utf-8

springboot mysql 配置类 springboot 数据库配置文件_spring boot


springboot mysql 配置类 springboot 数据库配置文件_数据_02


勾选 Transparent native-toascii conversion


当前 application.propertise 文件中的中文 显示的还是中文,而不是ASCLL码

2、读取配置文件

  1. 使用 @Value(“${key}”)
    key 表示 配置文件中的 key 值
  2. 如果 @Value(“${key}”) 中的 key 值在配置文件中不存在,SpringBoot启动时会报错

1. 设置一个Test类

package com.example.SpringBoot;

@Controller
@ResponseBody  // 说明返回的是 非页面的数据 (而不是静态页面),由SpringBoot进行数据加工
public class Test {

    @Value("${college}")
    private String str;

    @Value("${server.port}")
    private Integer port;
    
    @RequestMapping("/college")
    public String getCCTalkToken(){
        System.out.println(str);
        return  "  port: " + port + " " +  str;
    }
}

2. 启动SpringBoot,访问url(localhost:9999/college),返回响应页面

SpringBoot的启动端口为9999,在浏览器输入localhost:9999/college,得到访问结果:


三、yml文件

yml配置文件的优势

  1. 可读性强,使用类似json格式的树形配置方式进行配置的,层级之间使用换行缩进
  2. 写法简洁,properties文件配置存在数据冗余问题,使用yml可以很好的解决数据冗余问题
  3. 可以表述更加复杂的数据结构,如对象、集合、不同的数据类型
  4. 通用性强,可以跨语言,java、go、python都可以使用yml作为配置文件

添加配置和读取

使用键值对的形式添加配置, key: value

  1. 一定要注意,key:后面加有一个空格,再加上value
  2. 注意缩进

1. 普通的配置信息

(1)application.yml

# 系统提供的key
# 设置端口号
server:
  port: 9527

# 系统提供的key
#设置数据库信息
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/manageplayers
    username: root
    password: 123456

(2)读取配置文件
读取普通的配置信息和读properties文件一样

package com.example.SpringBoot
@Controller
@ResponseBody  // 说明返回的是 非页面的数据 (而不是静态页面),由SpringBoot进行数据加工
public class Test {

    //读取配置文件中 cctalk.token 对应的信息
    
    @Value("${spring.datasource.url}")
    private String str;

    @Value("${server.port}")
    private Integer port;



    @RequestMapping("/college")
    public String getCCTalkToken(){
        System.out.println(str);
        return  "  port: " + port + " " +  str;
    }
}

(3)启动SpringBoot,访问url(localhost:9527/college),得到响应界面

springboot mysql 配置类 springboot 数据库配置文件_数据_03


springboot mysql 配置类 springboot 数据库配置文件_配置文件_04

2. 配置不同的数据类型

配置不同的数据类型,key是用户自己定义的,随便取名
(1)application.yml

# 均为用户自定义的key、value
# 字符串
myString1:
  你好 \n 世界!!!
myString2:
  '你好 \n 世界!!!'
myString3:
  "你好 \n 世界!!!"
  
# 整数
myInteger:
  666

# null
# 不是有个值叫作 null,是啥也没有
myNull:
  null

# 布尔值
myBoolean:
  value:
    true

(2)读取配置文件

package com.example.SpringBoot;

@Controller
@ResponseBody  // 标识 方法返回的是非静态页面的数据
public class ReadConfigController {

    @Value("${myString1}")
    private String myString1;

    @Value("${myString2}")
    private String myString2;

    @Value("${myString3}")
    private String myString3;

    @RequestMapping("/getString")
    public String getMyString(){
        System.out.println(myString1);
        System.out.println(myString2);
        System.out.println(myString3);

        return myString1;
    }

    
    @Value("${myInteger}")
    private Integer myInteger;

    @RequestMapping("/getInteger")
    public Integer getMyInteger(){
        return myInteger;
    }

    @Value("${myNull}")
    private Object myObject;

    @RequestMapping("/getNull")
    public Object getMyObject(){
        return myObject;
    }
}

(3)访问url(localhost:9527/getNull),得到响应页面

springboot mysql 配置类 springboot 数据库配置文件_配置文件_05

关于.yml配置文件 中的value加单双引号
字符串默认不用加单引号或双引号,如果加上英文的单引号或双引号可以表示特殊的含义

  1. 单引号会转义特殊字符,特殊字符最终只是一个普通的字符串数据(‘/n’ 最终打印 /n)
  2. 双引号不会转义字符串里面的特殊字符;特殊字符会作为本身想要表示的意思(“/n” 最终打印 换行)

浏览器输入 localhost:9527/getString

springboot mysql 配置类 springboot 数据库配置文件_spring_06


IDEA控制台:


springboot mysql 配置类 springboot 数据库配置文件_java_07

3. 配置对象

(1)application.yml

有两种配置方法

# 用户自定义key、value
# 配置对象
student1:
  university: 西北工业大学
  address: 西安

student2: {university: 西北大学,address: 西安}

(2)读取配置文件中的对象

使用 @ConfigurationProperties(prefix = “key”)

  1. 此处的key和配置文件中key匹配,不匹配也不会报错
  2. 实体类中属性和配置文件中对象的属性,是通过setter方法(setter方法的方法名)匹配的而不是属性名set + 配置文件中对象属性名,就表示要将它设置到实体类中;参数就是它的值;方法体决定设置给当前类的哪个属性
  3. 当有多余的属性或setter方法,也是没有关系的

在Component包下面,创建一个实体类Student(名字随便)

  1. 通过@ConfigurationProperties读取配置文件中的对象
  2. 一定要有setter方法,SpringBoot调用setter方法,将配置文件中对象的信息,设置给对应的成员属性
  3. 一定要有类注解,SpringBoot容器中就有了一个Student对象
package com.example.SpringBoot.Component;


@Component
@ConfigurationProperties(prefix = "student2")
public class Student {
    public String college;
    public String location;
    public String score;


    public String getCollege() {
        return college;
    }
    
    // 将配置文件中 Student2 对象 的属性 university 设置给 college
    public void setUniversity(String college) {
        this.college = college;
    }

    public String getLocation() {
        return location;
    }
    
    // 将配置文件中 Student2 对象 的属性 address 设置给 location
    public void setAddress(String location) {
        this.location = location;
    }

    public String getScore() {
        return score;
    }

    public void setScore(String score) {
        this.score = score;
    }
}

(3)使用对象

package com.example.SpringBoot;

@Controller
@ResponseBody  // 标识 方法返回的是非静态页面的数据
public class ReadConfigController {

    @Autowired
    private Student student;

    @RequestMapping("/getStudent")
    public HashMap<String,String> getStudent(){
        HashMap<String,String> map = new HashMap<>();
        map.put("university", student.getUniversity());
        map.put("address", student.getAddress());
        return map;
    }
}

(4)访问url(localhost:9527/getStudent),返回的响应页面

springboot mysql 配置类 springboot 数据库配置文件_配置文件_08

4. 配置集合

(1)application.yml

有两种配置方法

# 用户自定义的 key、value
# 配置集合
# list 是集合的名字
dbtypes1:
  list:
    - 刘备
    - 关羽
    - 张飞

dbtypes2: { list: [ 曹操,张辽,徐晃] }

(2)读取配置文件中的集合

通过 @ConfigurationProperties(prefix = “key”) 读取
此处的setter方法与 配置对象 的setter方法一样;SpringBoot调用setter方法通过setter方法名(setter + 配置文件中集合名称)找到配置文件中对应的集合,将配置文件中集合设置给当前类的集合,

在Component包下面,创建一个实体类DB,其属性之一为集合

package com.example.SpringBoot.Component;

@Component
@ConfigurationProperties(prefix = "dbtypes2")  // 一定要和配置文件中的key对应
public class DB {
    private List<String> array;
    
    private String name;

   
    public List<String> getArray() {
        return array;
    }

    // 将配置文件中 dbtypes2 中的 list 设置给 array 属性 
    public void setList(List<String> array) {
        this.array = array;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

(3)使用这个集合

package com.example.SpringBoot;

@Controller
@ResponseBody  // 标识 方法返回的是非静态页面的数据
public class ReadConfigController {
    @Autowired
    private DB db;

    @RequestMapping("/getList")
    public List<String> getList(){
        return db.getArray();
    }
}

(4)访问url(localhost:9527/getList),返回响应页面


需要注意的是 @ConfigurationProperties 中的 prefix 属性值有要求:prefix值应该用小写字母、数字、中划线“-”区分单词