SpringBoot 配置文件

SpringBoot 配置文件

配置⽂件作用

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

硬编码是将数据直接嵌⼊到程序或其他可执⾏对象的源代码中, 也就是我们常说的"代码写死"

例如字体的大小

如果采⽤硬编码的⽅式,就直接在程序中指定字体⼤⼩,所有的⽤⼾使⽤的都是同⼀个字体⼤⼩

但我们现实中会根据用户的喜好来进行字体的大小显示

在SpringBoot中⽀持并定义了配置⽂件的格式, 也在另⼀个层⾯达到了规范其他框架集成SpringBoot的⽬的

例如

项⽬的启动端⼝

SpringBoot内置了Tomcat服务器,默认端⼝号是8080, 但是⽤⼾电脑上8080端⼝号有可能就被其他 应⽤程序占⽤了,所以SpringBoot需要⽀持让⽤⼾⾃定义端⼝号

数据库的连接信息

包含⽤⼾名和密码的设置

第三⽅系统的调⽤密钥等信息

⽤于发现和定位问题的普通⽇志和异常⽇志等

配置文件

修改端口号 我们默认的端口号时8080 可以修改

application.properties 文件

让我们的端口号就被改成了9090

配置⽂件的格式

Spring Boot 配置⽂件有以下三种

application.properties

application.yml

application.yaml

其中yml是yaml的缩写 和yaml的使用方法一样

当应用启动时SpringBoot会⾃动从classpath路径找到并加载这三种文件

注意:

.properties文件和.yml文件可以在一个项目之中存在当两个同时存在时会以.properties为主(.properties)的优先级更高 但是我们通常会取用一种配置文件格式

.properties配置文件说明

.properties的键值的形式配置的key和value之间是以"="之间连接的 可以使用"#"来添加注释信息

例如:

java 复制代码
# åº"ç"¨æœåŠ¡ WEB 访é---®ç<<¯å£
server.port=8080
#配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

读取配置文件

如果要在项目读取配置文件的内容可以使用@value注解实现注解使用"${}"格式读取

properties 配置如下:

java 复制代码
package com.demos.Controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PropertiesController {
    @Value("${mykey.key1}")
    private String key1;
    @RequestMapping("/key")
    public String key(){
        return "读取到值:" + key1;
    }
    
    
}


properties的缺点

从上述配置看到properties很啰嗦

我们可以使用yml配置文件格式化

yml配置⽂件

基本语法

yml是树形结构的配置⽂件 语法是key:value

key和value之间使用英文冒号加空格方式组成(空格不能省略)

例如

使用yml连接数据库

使用示例:

yaml 复制代码
key1: hello
spring: 
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
    username: root
    password: root

它和和properties连接数据库就显得简洁了许多

yml配置不同数据类型及nul

yaml 复制代码
#字符串
spring.value: Hello
#整数
int.value: 10
#浮点数
float.value: 3.14
#Null ~代表null
null.value: ~
#""空字符 也可以后面什么都不加
empty.value: ""

yml配置读取

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

yml配置:

注意: value值加单双引号

字符串默认不⽤加上单引号或者双引号

如果加英⽂的单双引号可以表⽰特殊的含义

例如:

java 复制代码
@RestController
public class ReadYml {
    @Value("${string.hello}")
    private String hello;
    @Value("${string.str1}")
    private String str1;
    @Value("${string.str2}")
    private String str2;
    @Value("${string.str3}")
    private String str3;
    @RequestMapping("/ymlKey")
    public String key(){
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
        return "yml";
    }
}

结果:

可以看到

字符默认不用加上单引号或者双引号

单引号会转义特殊字符,使其失去特殊功能,始终是⼀个普通的字符串

双引号不会转义字符串⾥⾯的特殊字符,特殊字符会表⽰本⾝的含义

单引号会转义\n不再表⽰换⾏了,⽽是表⽰⼀个普通的字符串

双引号不会转义,表⽰\n表⽰的是它本⾝的含义,就是换⾏

配置对象

还可以在yml中配置对象

例如

yaml 复制代码
student:
  id: 1
  name: 张三
  age: 18

也可以使用这种写法

yaml 复制代码
student2: {id: 2,name: 李四,age: 18}

这时我们需要另外一个注解@ConfigurationProperties来读取

例如:

java 复制代码
 @ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
    private int id;
    private String name;
    private int age;
}

调⽤类的实现

java 复制代码
@RestController
public class StudentController {
    @Autowired
    private Student student;
    @RequestMapping("/readStudent")
    public String readStudent(){
        return student.toString();
    }
}

配置集合

配置⽂件也可以配置list集合

例如:

yaml 复制代码
dbtypes:
  name:
    - mysql
    - sqlserver
    - db2

集合的读取和对象⼀样

例如

yaml 复制代码
maptypes:
  map:
    k1: key1
    k2: key2
    k3: key3

或者

yaml 复制代码
maptypes2: {map: {k1: key1, k2: key2, k3: key3}}

读取

java 复制代码
@ConfigurationProperties("maptypes")
@Component
@Data
public class MapConfig {
    private HashMap<String,String> map;
}
java 复制代码
@RestController
public class ReadYml3 {
    @Autowired
    private MapConfig mapConfig;
    @RequestMapping("/readMap")
    public String readMap(){
        return mapConfig.toString();
    }
}

结果

yml的优缺点

优点可读性高易于理解

⽀持更多的数据类型,可以简单表达对象,数组,List,Map等数据形态.

⽀持更多的编程语⾔,不⽌是Java中可以使⽤,在 Golang,Python,Ruby,JavaScript中也可以使⽤

缺点

不适合写复杂的配置文件

如properties格式

yaml 复制代码
 keycloak.security[0].authRoles[0]= user
 keycloak.security[0].collections[0].name = ssologinurl
 keycloak.security[0].collections[0].patterns[0] = /login/*

变成yml

yaml 复制代码
keycloak:
	security[0]:
		- authRoles[0]: 
		- user
		collections[0]:
			- name: ssologinurl
			   patterns[0]: /login/*
	
相关推荐
开心工作室_kaic13 分钟前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
懒洋洋大魔王15 分钟前
RocketMQ的使⽤
java·rocketmq·java-rocketmq
武子康20 分钟前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
qq_174482857543 分钟前
springboot基于微信小程序的旧衣回收系统的设计与实现
spring boot·后端·微信小程序
转世成为计算机大神1 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
qq_327342731 小时前
Java实现离线身份证号码OCR识别
java·开发语言
锅包肉的九珍1 小时前
Scala的Array数组
开发语言·后端·scala
心仪悦悦1 小时前
Scala的Array(2)
开发语言·后端·scala
2401_882727572 小时前
BY组态-低代码web可视化组件
前端·后端·物联网·低代码·数学建模·前端框架
心仪悦悦2 小时前
Scala中的集合复习(1)
开发语言·后端·scala