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/*
	
相关推荐
孤寒者3 分钟前
(三十一)Flask之wtforms库【剖析源码下篇】
后端·python·flask·源码剖析·wtforms
milong5217 分钟前
Flask自定义命令
后端·python·flask
对许10 分钟前
Java操作Excel最佳实践
java·spark·excel
knighthood200111 分钟前
flask中解决图片不显示的问题(很细微的点)
后端·python·flask
高级程序源17 分钟前
springboot学生档案信息管理系统-计算机毕业设计源码96509
java·spring boot·spring·eclipse·mybatis·idea
努力的蚂蚁【你若】24 分钟前
Vue打包文件dist放在SpringBoot项目下运行(正确实现全过程)
前端·vue.js·spring boot
小子爱吃鱼24 分钟前
ERP的模块说明
后端·工厂方法模式
martian66539 分钟前
学懂C#编程:属性(Property)的概念定义及使用详解
java·开发语言·c#·属性·property
阿亮说技术1 小时前
Java毕业设计 基于SSM vue电影院票务系统小程序 微信小程序
java·微信小程序·毕业设计·课程设计
时间瑾1 小时前
线程池实践篇
java·开发语言