7.SpringBoot2

1.配置文件作用

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

  • 数据库的连接信息(包含用户名和密码设置)
  • 项目的启动端口
  • 第三方系统的调用秘钥等信息
  • 用于发现和定位问题的普通日志和异常日志等

2.配置文件的分类

1.系统的配置文件,比如连接字符串,比如日志的相关设置,系统定义好的

2.用户自定义的

3. 配置文件的格式

Spring Boot 配置文件主要分为以下两种格式:

  • .properties
  • .yml

如下图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-njr4Ub2j-1660202994980)(C:\Users\17673\AppData\Roaming\Typora\typora-user-images\image-20220721191831054.png)]

规则

1.一个项目中可以存下两种配置文件(properties 和 yml), 但是不建议一个项目中出现两种配置文件

2.当一个项目的某个配置,出现两种格式的配置文件中时,那么配置项会以 properties 为主(忽略 yml 中配置)

4.properties 配置文件说明

1.properties 基本语法

properties 是以键值的形式配置的, key 和 value 之间是以 "="连接的

#配置项目端口号
server.port=8084
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=1234

2.读取配置文件

如果在项目中,想要主动的读取配置文件的内容,可以使用@Value注解来实现.

@Value 注解使用"${}"的格式读取

@Component
public class ReadProperties {
    @Value("${server.port}")
    private String port;

    @PostConstruct
    public void postConstruct(){
        System.out.println("Read YML,port:" + port);
    }
}

运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oRgK3umh-1660202994981)(C:\Users\17673\AppData\Roaming\Typora\typora-user-images\image-20220721193332817.png)]

5.yml配置文件说明

yml 特点:

  1. 写法简单,可读性高
  2. 支持更多的数据类型
  3. 跨语言使用: java/golang/高版本 python

yml 最大的优势是可以跨语言,不止是 Java 中可以使用 golang,python 都可以使用 yml 作为配置文件

1. yml 基本语法

yml 是树形结构的配置文件, 它的基础语法是"Key: value",注意 key 和 value 之间使用英文冒号加空格的方式组成的,其中空格不可省略

基础语法如下

#key: value

#连接数据库
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
    username: root
    password: 1234
2. yml 使用进阶

yml 配置不同数据类型及null

#字符常
string.value: 你好

#布尔值
boolean.value: true
boolean.value1: false
#整数
int.value: 10

#浮点数
float.value: 3.14159

#null
null.value: ~

yml配置读取

@Component
public class ReadYml {
    @Value("${string.value}")
    private String hello;

    @PostConstruct
    public void postConstruct(){
        System.out.println("Read YMl,hello" + hello);
    }
}

运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9XzRJL7X-1660202994982)(C:\Users\17673\AppData\Roaming\Typora\typora-user-images\image-20220721195921435.png)]

注意事项: value 值加单双引号

application.yml 中配置如下信息

string:
  str1: hello\nSpring boot.
  str2: 'hello\nSpring boot.'
  str3: "hello\nSpring boot"

读取程序实现代码

@Component
public class ReadYml {
    @Value("${string.str1}")
    private String hello;

    @Value("${string.str2}")
    private String hello1;

    @Value("${string.str3}")
    private String hello2;
    @PostConstruct
    public void postConstruct(){
        System.out.println("Read YMl, " + hello);
        System.out.println("Read YMl, " + hello1);
        System.out.println("Read YMl, " + hello2);
    }
}

运行结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QzZPrSgR-1660202994982)(C:\Users\17673\AppData\Roaming\Typora\typora-user-images\image-20220721200608288.png)]

结论:yml 中如果使用了双引号就会按照(原)语义执行,如果不加单双引号,或者加了单引号,那么默认会将字符串中的特殊字符进行转义,比如\n->\n(转义)处理

yml 对象配置和读取

yml 中配置对象

student:
  id: 1
  name: Java
  age: 18
#student: {id: 1,name: Java,age: 18}

此时不能用 @Value 来读取配置中的对象了,此时要使用另一个注解 @ConfigurationProperties来读取

@ConfigurationProperties(prefix = "student")
@Component
public class StudentComponent {
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "StudentComponent{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
--------------------------------
@Data
@ConfigurationProperties(prefix = "student")
@Component
public class Student {
    private int id;
    private String name;
    private int age;
}

调用类

@Component
public class ReadYml2 {
    @Autowired
    private StudentComponent studentComponent;

    @PostConstruct
    public void postConstruct(){
        System.out.println(studentComponent);
    }
}

运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LQQb6OVq-1660202994983)(C:\Users\17673\AppData\Roaming\Typora\typora-user-images\image-20220721201729652.png)]

配置集合

yml配置文件

dbtypes:
  name:
    - mysql
    - sqlserver
    - db2
dbtypes2: {name: [mysql,sqlserver,db2]}

集合的读取和对象一样,也是使用@ConfigurationProperties来读取的,具题实现如下

@Data
@ConfigurationProperties(prefix = "dbtypes2")
@Component
public class ListConfig {
    private List<String> name;
}

打印类的实现如下

@Component
public class ReadYml3 {
    @Autowired
    private ListConfig listConfig;

    @PostConstruct
    public void postConstruct(){
        System.out.println(listConfig.getName());
    }
}

运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Da1SBTRl-1660202994983)(C:\Users\17673\AppData\Roaming\Typora\typora-user-images\image-20220721202734044.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值