7. Spring Boot 配置文件

目录

1. 配置文件作用

2. 配置文件格式

3. properties 配置文件说明

3.1 properties 基本语法

3.2 读取配置文件

3.3 缺点

4. yml 配置文件说明

4.1 properties 基本语法

4.2 读取配置文件

4.3 yml 配置不同的数据类型

布尔值

整数值

 null 值

配置对象

 配置集合

配置 Map

Banner 

多平台的文件配置

4.4 优点

5 properties VS yml


1. 配置文件作用

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

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

如果没有配置信息,那么 Spring Boot 项目就不能连接和操作数据库,甚至不能保存可以用于排查问题的关键日志,所以配置文件的作用是非常重要的。

2. 配置文件格式

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

  • .properties
  • .yml

properties 类型的配置文件属于“旧款”,是创建 Spring Boot 项目时默认的文件格式;而 yml 属于新版款式,如果用户需要新款则使用新款。

1. 理论上讲 properties 可以和 yml ⼀起存在于⼀个项目当中,当 properties 和 yml ⼀起存在于⼀个项目中时,如果配置文件中出现了同样的配置,比如 properties 和 yml 中都配置了“server.port”, 那么这个时候会以 properties 中的配置为主,也就是 .properties 配置文件的优先级最高,但加载完 .properties 文件之后,也会加载 .yml 文件的配置信息。

2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取一种统一的配置文件格式,这样可以更好的维护(降低故障率)。

3. properties 配置文件说明

properties 配置文件是最早期的配置文件格式,也是创建 Spring Boot 项目默认的配置文件。

配置文件包括:

  • Spring 的配置
  • 自定义配置
3.1 properties 基本语法

properties 是以键值的形式配置的,key 和 value 之间是以“=”连接的,如:

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

# 自定义配置
mykey.key1=aaa

key (= 前面)只要是字符串就可以。 但是规范为:全部小写,单词之间使用 . 分割

一般来说,类名:首字母大写(大驼峰)

变量名:首字母小写(小驼峰)

常量:全大写,单词之间使用_分割

3.2 读取配置文件

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

@Value 注解使用“${}”的格式读取,如下代码所示:

@RestController
public class ValueController {
    @Value("${mykey.key1}")
    private String key1;

    @PostConstruct
    public void postConstruct(){
        System.out.println("===========================");
        System.out.println("key:" + key1);
    }
    public String hi(){
        return "hi~ ValueController...";
    }
}

我们通过 @Value 获取自定义的配置文件中的值。

如果我们去掉 ${},那么可以看到最终结果直接将双引号里面的值赋值给了 key1 变量:

@RestController 在Spring Boot 启动时会注入到框架中,注入到框架中时会执行 @PostConstruct 初始化方法,此时就能读取到配置信息了。 

3.3 缺点

properties 配置是以 key-value 的形式配置的,因此配置文件中会有很多的冗余的信息

4. yml 配置文件说明

yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中文就是“另⼀种标记语 言”。

4.1 properties 基本语法

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

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
    username: root
    password: root

4.2 读取配置文件

同样通过@Value 注解使用“${}”的格式读取:

@RestController
public class ValueController {
    @Value("${spring.datasource.username}")
    private String sqlusername;

    @PostConstruct
    public void postConstruct(){
        System.out.println("===========================");
        System.out.println("sqlusername:"+sqlusername);
    }
    public String hi(){
        return "hi~ ValueController...";
    }
}

4.3 yml 配置不同的数据类型
布尔值
mykey:
  key1: true

整数值
mykey:
  key1: 10

 null 值
mykey:
  key1: ~

 对于单引号和双引号的区别:

String:
  str1: Hello \n Spring Boot.
  str2: 'Hello \n Spring Boot.'
  str3: "Hello \n Spring Boot."

配置对象
Student:
  id: 1
  name: danny
  age: 18
public class Student {
    private Integer id;
    private String name;
    private Integer age;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

我们可以看到直接写上面一个类非常麻烦,需要加入 get 和 set 方法,因此,我们可以通过添加注解 @Data 来帮助我们直接写 get 和 set 方法,以及 toString 方法,还有一些构造函数。 

@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
    private Integer id;
    private String name;
    private Integer age;
}

通过五大注解接收对象,将对象存放至 Spring 中,此处使用 @Component 注解;

通过 @ConfigurationProperties(prefix = "student") 将 yml 文件中的 Student 赋值给这个对象(“prefix =”可以省略),此处的 student 首字母要小写。

@RestController
public class ValueController {

    @Autowired
    private Student student;
    @PostConstruct
    public void postConstruct(){
        System.out.println("===========================");
        System.out.println(student);
        System.out.println("===========================");
    }
    public String hi(){
        return "hi~ ValueController...";
    }
}

 配置集合
Student:
  id: 1
  name: danny
  age: 18
  dbtypes:
    - mysql
    - sqlserver
    - db2
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
    private Integer id;
    private String name;
    private Integer age;
    
    private List<String> dbtypes;
}

配置 Map
Student:
  id: 1
  name: danny
  age: 18
  dbtypes:
    - mysql
    - sqlserver
    - db2
  map2:
    k1: kk1
    k2: kk2
    k3: kk3
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
    private Integer id;
    private String name;
    private Integer age;

    private List<String> dbtypes;
    private Map<String,String> map2;
}

Banner 

我们可以通过在线工具直接生成 banner:Spring Boot banner在线生成工具,制作下载英文banner.txt,修改替换banner.txt文字实现自定义,个性化启动banner-bootschool.netSpring Boot banner工具实现在线生成banner,轻松修改替换实现自定义banner,让banner.txt文件内容更有趣,是很棒的Spring Boot banner自定义和命令行ascii文字工具,还可以生成linux、MAC各系统命令行终端ascii文字,有了它你的项目会变得有意思。https://www.bootschool.net/ascii

我们选择下载文件,将下载好的文件命名为 banner.txt 粘贴在 idea 的 resource 文件夹下:

重新运行程序,可以看到此时生成的是我们刚刚设置的文件:

多平台的文件配置

实际工作中的开发环境分为开发环境(自测)、测试环境(测试人员进行测试,测试环境的数据都是测试人员/开发人员造的数据,是假数据)、预发布环境和发布环境(通常数据是一样的,都是线上真实的用户数据)。

我们希望在不同的配置环境中执行不同的配置文件,因此将主文件中的配置注释,并进行设置: 

@RestController
public class ValueController {
    @Value("${spring.datasource.username}")
    private String sqlusername;
    @Value("${spring.datasource.password}")
    private String password;

    @Autowired
    private Student student;
    @PostConstruct
    public void postConstruct(){
        System.out.println("===========================");
        System.out.println("sqlusername:"+sqlusername);
        System.out.println("password:"+password);
        System.out.println("===========================");
    }
    public String hi(){
        return "hi~ ValueController...";
    }
}

设置为 test 环境下: 

设置为 prod 环境下: 

综上,多平台文件配置的步骤可以总结如下: 

  1. 先写各个环境的配置文件:application-xxx.yml
  2. 在主配置文件 application.yml 中设置环境参数
4.4 优点

yml 的优点:

  1. yml 可读性高,写法简单、易于理解,它的语法和 JSON 语言类似。
  2. yml 支持更多的数据类型,它可以简单表达清单 (数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。
  3. yml 支持更多的编程语言,它不止是 Java 中可以使用,在 Golang、PHP、Python、Ruby、JavaScript、Perl 中同样可以使用。

5 properties VS yml

  1. properties 是以 key=value 的形式配置的键值类型的配置⽂件,而 yml 使用的是类似 json 格式的树形配置方式进行配置的,yml 层级之间使用换行缩进的方式配置,key 和 value 之间使用“: ”英文冒号加空格的方式设置,并且空格不可省略
  2. properties 为早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用 yml 可以很好的解决数据冗余的问题。
  3. yml 通用性更好,支持更多语言,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份配置文件作为 Java 和 Go 的共同配置文件。
  4. yml 支持更多的数据类型。

当我们关闭再打开 idea,可以看到 .properties 文件出现了乱码:

因为它的格式为:

而 .yml 文件的格式为:

因此需要修改 .properties 文件的格式:

之后再打开 .properties 文件不会再出现乱码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值