Spring Boot 配置文件

22 篇文章 0 订阅

在这里插入图片描述

T04BF

👋专栏: 算法|JAVA|MySQL|C语言

🫵 今天你敲代码了吗

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之间是以"="连接的.

# 配置项目端口号
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注解使用${}的格式读取

# 配置信息
mykey.key1 = jwcb
@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之间用冒号加空格的方式组成,空格不可省略

# 正确配置
key1: jwbc

# 错误配置
key2:jwbc

使用yml连接数据库

spring:
  datasource:
    url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
    username: root
    password: root

5.5.2 使用进阶

配置不同数据类型及null
# 字符串
string: 
  value: Hello

# 布尔值
boolean:
  value: true

# 整数
int: 
  value: 1

# 浮点数
float: 
  value: 1.1

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

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

读取

与properties类似,使用@value即可
访问后得到:

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

# 字符串
string:
  value1: Hello \n Hi
  value2: 'Hello \n Hi'
  value3: "Hello \n Hi"
@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);
    }
}

访问后结果为:

可以看出:

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

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

@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;
    }
}

访问后得到:

就是我们配置的数据

配置集合
studentlist: 
  name: 
    - zhangsan
    - lisi
    - wangwu

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

@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
mapexample:
  map:
    k1: k11
    k2: k22
    k3: k33
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

🫵 今天记得敲代码
  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值