当前位置: 首页 > article >正文

七、深入了解SpringBoot的配置文件

一、配置端口号

通过配置文件application.properties配置修改端口号

修改 application.properties 文件

#端口号修改成 9090
server.port=9090

运行结果,观察日志

二、配置文件格式

Spring Boot 配置⽂件有以下三种:

• application.properties

• application.yml

• application.yaml

其中yml为yaml的简写,实际开发中出现频率最高

应⽤程序启动时,SpringBoot会⾃动从classpath路径找到并加载 application.properties 和 application.yaml 或者 application.yml ⽂件.

说明:

1.理论上讲·properties和·yml可以并存在于一个项目中,当·properties和·yml
并存时,两个配置都会加载.如果配置文件内容有冲突,则以properties为主,也就是
properties优先级更高.
2.虽然理论上来讲·properties可以和·ymL共存,但实际的业务当中,我们通常会采取一种
统一的配置文件格式
,这样可以更好的维护(降低故障率)

三、properties配置文件说明

properties 配置⽂件是最早期的配置⽂件格式,也是创建SpringBoot项⽬默认的配置⽂件

3.1 properties 基本语法

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

#端口号修改成 9090
server.port=9090
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
pring.datasource.password=123456

3.2 读取配置⽂件

如果在项目中,想要主动的读取配置文件中的内容,可以使用@Value注解来实现
@Value注解使用”${}“的格式读取,如下代码所示:

application.properties的文件配置:

book.key1=key1

在postman中运行结果: 

 3.3 properties 缺点分析

properties 配置是以key-value的形式配置的,properties配置文件中会有很多的冗余的信息 如下图:

 四、yml配置文件的说明

4.1 yml基本语法

yml是树形结构的配置文件,它的基础语法是"key:value"

key和value之间使⽤英文冒号加空格的⽅式组成,空格不可省略

使用yml连接数据库 

yml使用示例:

#端口号
server:
  port: 9092

#连接数据库
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
  username: root
  password: 123456

yml和properties连接数据库的配置对比

yml:

 properties:

4.2 yml使用进阶 

4.2.1 yml配置不同数据类型及null

#字符串
string.value: hello world

#布尔值
boolean.value1: true
boolean.value2: false

#整数
int.value: 10

#浮点数
float.value: 3.14159

#Null
null.value: ~

#"" 空字符串
#  直接后⾯什么都不加就可以了,但这种⽅式不直观,更多的表⽰是使⽤引号括起来
empty.value: ""

4.2.1.1 yml配置读取

yml读取配置的⽅式和properties相同,使⽤@Value 注解即可,实现代码如下:

yml配置:

@RestController
public class PropertiesController {

    @Value("${int.value}")
    private int intValue;

    @RequestMapping("/readInt")
    public String readAll() {
        return "intValue:" + this.intValue ;
    }
}

在postman中测试    访问127.0.0.1:9090/readInt 

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

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

在application.yml中配置如下信息:

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

在ReadYml中实现如下代码:

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

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

    @Value("${String.str3}")
    private String str3;

    @RequestMapping("/yml")
    public String readYml() {
        System.out.println("str1 : " + str1);
        System.out.println("str2 : " + str2);
        System.out.println("str3 : " + str3);
        return "yml";
    }
}

运行结果如下:

 4.2.2 配置对象

在yml中配置对象:

student:
  id: 1
  name: zhangsan
  age: 18

此时要使用另⼀个注解 @ConfigurationProperties 来读取

package com.example.demo.model;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

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

调用类(StudentController)的实现如下:

package com.example.demo.controller;

import com.example.demo.model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class StudentController {
    @Autowired
    private Student student;

    @RequestMapping("/readStudent")
    public String readStudent() {
        return student.toString();
    }
}

访问 http://127.0.0.1:8080/readStudent:结果如下:

4.2.3 配置集合

配置文件也可以配置list集合:

dbtypes:
  name:
    -- mysql
    -- sqlserver
    -- db

集合的读取和对象⼀样,也是使用 @ConfigurationProperties 来读取

package com.example.demo.model;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

@Component
@ConfigurationProperties(prefix = "dbtypes")
@Data
public class DBType {
    private List<String> name;
    private Map map;
}

访问集合的实现如下:

@RestController
public class ReadYml {
    @Autowired
    DBType dbType;

    @RequestMapping("/readList")
    public String readList() {
        return dbType.toString();
    }
}

访问 127.0.0.1:8080/readList 结果如下:

 4.2.4 配置Map

配置文件也可以配置map

maptypes:
  map:
    key1: value1
    key2: value2
    key3: value3

Map的读取和对象⼀样,也是使用@ConfigurationProperties 来读取

package com.example.demo.model;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.HashMap;

@Component
@ConfigurationProperties(prefix = "maptypes")
@Data
public class MapConfig {
    private HashMap<String, String> map;
}

打印类的实现:

package com.example.demo.controller;

import com.example.demo.model.DBType;
import com.example.demo.model.MapConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ReadYml {
    @Autowired
    MapConfig mapConfig;

    @RequestMapping("/readMap")
    public String readMap() {
        return mapConfig.toString();
    }
}

访问:127.0.0.1:8080/readMap 返回结果如下:

 五、使用yml的好处

优点:
1.可读性高,写法简单,易于理解
2.  支持更多的数据类型,可以简单表达对象,数组,List,Map等数据形态.

3.  支持更多的编程语言,不止是Java中可以使用,在Golang,Python,Ruby,JavaScript中也可以使用

缺点:

1、不适合写复杂的配置文件

xml 和 properties的对比图如下:


http://www.kler.cn/a/527105.html

相关文章:

  • golang面试题
  • 每日一题——序列化二叉树
  • 【视频+图文详解】HTML基础4-html标签的基本使用
  • 从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(动态菜单组件实现)
  • ESP32-S3模组上跑通esp32-camera(39)
  • doris:异常数据处理
  • 代随(138):单调栈:一维接雨水
  • 如何将IP切换到海外:详细指南
  • WebSocket使用及优化(心跳机制与断线重连)_websocket timeout
  • IT运维的365天--025 H3C交换机用NTP同步正确的时间
  • PyDeequ库在AWS EMR启动集群中数据质量检查功能的配置方法和实现代码
  • FreeRTOS学习 --- 列表和列表项
  • 数据结构初探:链表之双向链表篇
  • C#面试常考随笔7:什么是匿名⽅法?还有Lambda表达式?
  • Python之如何在Visual Studio Code 中写的python程序打包成可以在Windows系统下运行的.exe程序
  • Vue 3.0打造响应式用户界面的新方式
  • 智慧园区平台系统在数字化转型中的作用与应用前景探究
  • T-SQL语言的区块链
  • 仿真设计|基于51单片机的贪吃蛇游戏
  • 【医学影像 AI】生成式 AI 基础模型 MINIM(2)研究方法
  • 【C++】类和对象(5)
  • 前端学习:Axios Http请求库入门与实战应用
  • Java中初步使用websocket(springBoot版本)
  • stm32教程:EXTI外部中断应用
  • 青少年编程与数学 02-008 Pyhon语言编程基础 08课题、变量与赋值
  • 本地部署DeepSeek