Spring Boot 配置文件


T04BF
👋专栏: 算法|JAVA|MySQL|C语言
🫵 今天你敲代码了吗

文章目录

    • 5.SpringBoot配置文件
      • [5.1 配置文件作用](#5.1 配置文件作用)
      • [5.2 配置文件入手](#5.2 配置文件入手)
      • [5.3 配置文件的格式](#5.3 配置文件的格式)
      • [5.4 properties配置文件说明](#5.4 properties配置文件说明)
        • [5.4.1 基本语法](#5.4.1 基本语法)
        • [5.4.2 读取配置文件](#5.4.2 读取配置文件)
        • [5.4.3 缺点](#5.4.3 缺点)
      • [5.5 yml配置文件说明](#5.5 yml配置文件说明)

5.SpringBoot配置文件

5.1 配置文件作用

配置文件主要是用来解决硬编码带来的问题,把可能会发生改变的信息,放在用一个集中的地方,当我们启动某个程序的时候,应用程序从配置文件中读取数据,并加载运行

所谓"硬编码"是值,将数据直接嵌入到程序或其他可执行对象的源代码中,也就是将代码写死,就比如手机字体大小,如果采用硬编码的方式,就直接在程序中指定字体大小,所有的用户使用的都是同一个字体大小

但是实际上不同的用户有不同的选择,就可以将字体大小放在配置文件里面,当程序启动的时候,读取配置信息,以用户设置的字体大小来显示

SpringBoot配置文件

SpringBoot支持并定义了配置文件的格式,很多项目或者框架的的配置信息也放在配置文件里面,比如:

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

5.2 配置文件入手

Spring内置的Tomcat服务器的默认端口是8080,但是如果8080端口号已经被其他进程使用了呢? 我们可以通过配置文件来修改服务器的端口号

SpringBoot在创建项目的时候,就已经帮我们创建了配置文件

我们尝试修改这个配置文件:

复制代码
server.port=9090

此时显示的Tomcat启动的端口号就是9090了

5.3 配置文件的格式

Spring Boot的配置文件有以下三种格式:

  • application.properties
  • application.yml
  • application.yaml

(实际上,yml是yaml的简写,使用方式一样)

当程序启动的时候,Spring Boot会自动从classpath路径找到并加载三种配置文件

存在多个配置文件

那么此时启动的端口号是多少??


可以看出,如果配置文件里面的内容有冲突,则以.properties为主,如果不冲突,则两个都起作用

5.4 properties配置文件说明

5.4.1 基本语法

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

properties 复制代码
# 配置项目端口号
server.port=9090

# 配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?charsetEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
5.4.2 读取配置文件

使用 @value注解来主动读取配置文件里面的内容
@value注解使用${}的格式读取

properties 复制代码
# 配置信息
mykey.key1 = jwcb
java 复制代码
@RestController
public class PropertiesController {
    @Value("${mykey.key1}")
    private String key1;

    @RequestMapping("/getKey")
    public String getKey() {
        return "读到的值为" + key1;
    }
}

访问结果为:

5.4.3 缺点

由于properties是以键值对的格式配置的,就会存有很很多的冗余的信息

5.5 yml配置文件说明

5.5.1 语法说明

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

key和value之间用冒号加空格的方式组成,空格不可省略

yaml 复制代码
# 正确配置
key1: jwbc

# 错误配置
key2:jwbc

使用yml连接数据库

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
    username: root
    password: root
5.5.2 使用进阶
配置不同数据类型及null
yaml 复制代码
# 字符串
string: 
  value: Hello

# 布尔值
boolean:
  value: true

# 整数
int: 
  value: 1

# 浮点数
float: 
  value: 1.1

# null(~代表null)
null:
  value: ~

# 空字符串(直接什么都不跟也可以)
empty:
  value: ''
读取

与properties类似,使用@value即可

访问后得到:

** 如果value加上单双引号:**

yaml 复制代码
# 字符串
string:
  value1: Hello \n Hi
  value2: 'Hello \n Hi'
  value3: "Hello \n Hi"
java 复制代码
@RestController
public class YmlController {

    @Value("${string.value1}")
    private String str1;

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

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

    @RequestMapping("/getYml")
    public void getYml() {
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
    }
}

访问后结果为:

可以看出:

  • 字符串默认不用加上单双引号
  • 加上单引号后,会转义特殊字符
  • 双引号不会转义特殊字符
配置对象
yaml 复制代码
student: 
  id: 1
  name: zhangsan
  age: 18

此时读取的时候要通过@ConfigurationProperties实现

java 复制代码
@Component
@ConfigurationProperties(prefix = "student")//prefix即前缀的意思
@Data
public class Student {
    private int id;
    private String name;
    private int age;
}



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

    @RequestMapping("getStudent")
    public Student getStudent() {
        return student;
    }
}

访问后得到:

就是我们配置的数据

配置集合
yaml 复制代码
studentlist: 
  name: 
    - zhangsan
    - lisi
    - wangwu

读取的时候也是通过@ConfigurationProperties实现

java 复制代码
@Configuration
@ConfigurationProperties("studentlist")
@Data
public class ListConfig {
    private List<String> name;
}



@RestController
public class ListConfigController {
    @Autowired
    private ListConfig listConfig;

    @RequestMapping("/getList")
    public String getList() {
        return listConfig.toString();
    }
}
配置Map
yaml 复制代码
mapexample:
  map:
    k1: k11
    k2: k22
    k3: k33
java 复制代码
a
@Component
@ConfigurationProperties("mapexample")
public class MapConfig {
    private HashMap<String,String> map;
}


@RestController
public class MapConfigController {
    @Autowired
    private MapConfig mapConfig;

    @RequestMapping("/getMap")
    public MapConfig getMap() {
        return mapConfig;
    }
}
5.5.3 缺点

不适合写复杂的配置文件
感谢您的访问!!期待您的关注!!!


T04BF
🫵 今天记得敲代码

相关推荐
devlei3 小时前
从源码泄露看AI Agent未来:深度对比Claude Code原生实现与OpenClaw开源方案
android·前端·后端
pshdhx_albert4 小时前
AI agent实现打字机效果
java·http·ai编程
沉鱼.444 小时前
第十二届题目
java·前端·算法
努力的小郑5 小时前
Canal 不难,难的是用好:从接入到治理
后端·mysql·性能优化
赫瑞5 小时前
数据结构中的排列组合 —— Java实现
java·开发语言·数据结构
Victor3565 小时前
MongoDB(87)如何使用GridFS?
后端
Victor3565 小时前
MongoDB(88)如何进行数据迁移?
后端
小红的布丁6 小时前
单线程 Redis 的高性能之道
redis·后端
GetcharZp6 小时前
Go 语言只能写后端?这款 2D 游戏引擎刷新你的认知!
后端
周末也要写八哥6 小时前
多进程和多线程的特点和区别
java·开发语言·jvm