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/*
	
相关推荐
路在脚下@28 分钟前
spring boot的配置文件属性注入到类的静态属性
java·spring boot·sql
啦啦右一30 分钟前
Spring Boot | (一)Spring开发环境构建
spring boot·后端·spring
森屿Serien31 分钟前
Spring Boot常用注解
java·spring boot·后端
苹果醋32 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
Hello.Reader2 小时前
深入解析 Apache APISIX
java·apache
盛派网络小助手2 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
菠萝蚊鸭2 小时前
Dhatim FastExcel 读写 Excel 文件
java·excel·fastexcel
旭东怪3 小时前
EasyPoi 使用$fe:模板语法生成Word动态行
java·前端·word
007php0073 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程
∝请叫*我简单先生3 小时前
java如何使用poi-tl在word模板里渲染多张图片
java·后端·poi-tl