SpringBoot配置文件

举报
bug郭 发表于 2022/10/06 22:22:01 2022/10/06
【摘要】 配置文件的作用整个项目中重要的数据信息都在配置文件中进行配置:数据库连接信息(url,用户名,密码)程序启动端口用于发现问题和定位问题的项目运行的普通日志和异常日志第三方系统调用的秘钥可以知道我们的配置文件在SpringBoot项目中十分重要,没有配置信息就不能进行数据库连接操作,也缺少了项目排查的日志信息,而且SpringBoot约定大于配置,所以日志信息十分重要! 配置文件格式.pro...

配置文件的作用

整个项目中重要的数据信息都在配置文件中进行配置:

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

可以知道我们的配置文件在SpringBoot项目中十分重要,没有配置信息就不能进行数据库连接操作,也缺少了项目排查的日志信息,而且SpringBoot约定大于配置,所以日志信息十分重要!

配置文件格式

  • .properties
  • .yml
    在这里插入图片描述

我们的application配置文件也是SpringBoot项目默认的配置文件!
也是久之前老款的配置文件,而yml配置文件是新款的配置文件,通用性更强!
同一个项目可以使用这两种格式的配置文件! 但是我们的一般会统一配置格式!还有就是application格式的配置文件优先级更高,当我们一个配置信息在这2个格式的配置文件都进行配置后,application优先!

properties配置文件

基本语法

采用key = val键值对的形式 !
键和值间通过=连接,
键值对之间通过换行分割

# 配置项目端口号
server.port=8084
#配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root

我们properties格式的文件是通过#进行注解信息!

读取配置文件

我们在配置文件配置的信息又如何读取呢?
我们可以通过@Value 注解中的${}输入配置的key值,进行读取操作:
注意${}需要""包裹:例如: @Value("${server.port}")

package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadYML {
    @Value("${server.port}")
    private String port;
    @PostConstruct
    public void postConstruct(){
        System.out.println("Read Properties,port:"+port);
    }
}

@PostConstruct注解:这是java提供的注解
修饰非静态的的void方法,被修饰的方法会在服务器加载Servlet时运行并且只允许一次! 在PostConstruct构造函数之后执行,再init方法之前!
通常我们会是在Spring框架中使用到@PostConstruct注解
该注解的方法在整个Bean初始化中的执行顺序:
Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)

在这里插入图片描述

properties不足之处

虽然properties是SpringBoot默认的配置格式,并且优先级高!
但是该格式的配置文件,因为是由=进行建值连接会有很多冗余信息!
在这里插入图片描述
还有该配置文件只能用于java项目代码,通用性低

YML配置文件

yml全称 YAML (YAML Ain’t a Markup Language)YAML不是一种标记语言,通常以.yml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,一种专门用来写配置文件的语言。. 可用于如: Java,C/C++, Ruby, Python, Perl, C#, PHP等。.
和其他高级语言类似,可以简单表达数组,列表,等数据形态! 通过空白符号缩进和大量依赖外观特点特别适合用于表达或编辑数据结构,各种配置文件!
最大优势就是跨语言!

基本语法

yml是树形结构的配置文件,基础语法是key: value键和值之前通过:英文冒号和空格进行连接!冒号后面的空格不能省略!!
键值对之前通过换行分割!

#设置项目端口
server:
  port: 8090
# 配置数据库连接信息
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
    username: root
    password: 123456

key : value中间的空格不能省略!
在这里插入图片描述
如果省略了中间空格IDEA下key值没有语法高亮!!!

读取配置文件

package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadYML {
    @Value("${server.port}")
    private String port;
    @PostConstruct
    public void postConstruct(){
        System.out.println("Read YML,port:"+port);
    }
}

yml格式的配置文件读取方式和properties配置文件读取方式是相同的!
通过@Value("${}")注解读取!
在这里插入图片描述

yml配置使用

  • 可以配置不同类型的数据 及null
# 字符串
string.value: Hello
#布尔值 true/false
boolean.value: true
# 整数
int.value: 10
int.vaule1: 0b1010_0111_1010_1110 # 二进制
# 浮点数
float.value: 3.1415
float.value1: 3.14159e-5 # 科学计数法
# NUll ~ 代表 null
null.value: ~

在这里插入图片描述

字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。

# 字符串默认不需要引号!
string:
  str1: Hello \n Spring Boot.
  str2: 'Hello \n Spring Boot.'
  str3: "Hello \n Spring Boot."

我们进行读取操作!
在这里插入图片描述

  • 字符串默认不用加上单引号或者双引号
  • 字符串加上单引号后,会转义特殊字符,使该特殊字符变成普通字符!
  • 双引号不会转义特殊字符的含义:就是说换行符会进行换行操作! 而默认不加引号或者加上单引号都会使换行符失去意义!

yml配置对象

#方式一:
student:
  name: 刘备
  age: 18
#方式二:
student1: {name: 刘备, age: 18}

在这里插入图片描述

配置的对象不能用@Value注解进行读取
要通过@ConfigurationProperties(prefix="keyname")注解进行读取!

package com.example.demo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
//通过这个注解将配置文件中的student对象信息初始化给实例Student注册到spring中!
//读取对象配置需要重写setter和getter方法才能读取到,否则无用!
@ConfigurationProperties(prefix = "student")
@Component
public class Student {
    private String name;
    private int age;

    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 "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

@Component
public class ReadYML {
    @Autowired //注入对象
    private Student student;
    @PostConstruct
    public void postConstruct(){
        System.out.println(student);
    }
}

在这里插入图片描述
注意:

只有实现了getter和setter方法读取对象配置才能生效否则没用

配置集合

# 配置集合List
dbtypes:
  name:
    - mysql
    - sqlserver
    - db2

#行内写法
dbtypes1: {name: [mysql,sqlserve,db2]}

集合的读取方式和对象一样也是通过@ConfigurationProperties(prefix="")注解进行读取配置操作!

package com.example.demo;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;
@ConfigurationProperties(prefix = "dbtypes")
@Component
@Data //重写geter和setter方法
public class ListConfig {
   private List<String> name;//这里名字要和配置文件key对应否则失败!
}

在这里插入图片描述

properties配置和yml配置比较

  • .properties是以key=value键值对的形式配置文件, .yml还是树形结构的形式进行配置文件key value之前,通过:加上空格设置空格不能省略!
  • properties为早期并且默认的配置格式,优先级比yml高,但是配置存在一定的冗余
  • yml通用性好,支持多语言配置文件如;java,python,golang等,如果是云服务开发,一份配置文件可以用于不同语言的代码!
  • yml虽然和properties共存,但是一般建议一个项目中使用统一格式的配置文件
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。