Spring Boot的配置文件

配置文件的作用

整个项目中所有重要的数据都是在配置文件中配置,如数据库的连接信息,项目的启动端口,用于发现和定位问题的普通日志和异常日志等等。配置文件可以分为两类

  1. 系统使用的配置文件(系统配置文件),如端口号的设置,连接数据库的配置
  2. 用户自定义的配置文件

配置文件的格式

Spring Boot的配置文件可以分为 .properties和 .yml两种格式。.properties属于早期时代的格式,也是Spring Boot项目的默认配置文件。当一个项目中存在两种格式的配置文件,并且两个配置文件都设置了相同的配置项,但值不同,那么properties的优先级更高。通常在一个项目中只会存在一种格式的配置文件。

properties的用法

  1. properties是以键值的形式配置的,key和value之间用"="连接,中间没有空格。
properties 复制代码
# 系统配置端口号
server.port=8888
# 自定义配置
name=zhangsan
  1. 使用@Value注解使用${}的格式读取配置文件
java 复制代码
@RestController
	public class Controller {
		@Value("${name}")//要和配置文件中的key值相同
		private String name;
		@PostConstruct
		public void sayHi() {
			System.out.println("hi: " + name);
		}
	}

:::info

  1. propertices的缺点
    :::

    我们发现properties有很多冗余信息,而使用yml就可以很好的解决

yml配置文件

yml的优点

  1. yml写法简单,可读性高
  2. yml支持更多数据类型,如数组,对象
  3. yml支持多语言

稍微规模大点的公司都开始使用微服务,像字节内部有java,go,python,php语言,只关心业务是否能够实现,使用什么语言并不关心。如果使用properties配置文件就要写多份,而yml就很好的解决了这个问题。

yaml 复制代码
key: value

注意:key和value之间使用冒号和空格组成

yml版本的连接数据库

yml进阶
配置不同数据类型
yaml 复制代码
#字符串
string.value: hello
#布尔值
boolean.value: true
boolean.value2: false
#整数
int.value: 10
#浮点数
float.value: 3.14
#空值,~表示Null
null.value: ~

读取配置文件中的基础类型使用@Value("${}")注解

java 复制代码
@RestController
	public class Controller {
		//要和key值对应
		@Value("${string.value}")
		private String hello;
		@PostConstruct
		public void postConstruct() {
			System.out.println(hello);
		}
		@Value("${boolean.value}")
		private boolean bool;
		@PostConstruct
		public void postConstruct2() {
			System.out.println(bool);
		}
		@Value("${null.value}")
		private Integer integer;
		@PostConstruct
		public void postConstruct3() {
			System.out.println(integer);
		}
	}

:::success

注意:value值加单/双引号

:::

yaml 复制代码
string:
  str1: hello \n Spring Boot
  str2: 'hello \n Spring Boot'
  str3: "hello \n Spring Boot"
java 复制代码
@RestController
public class Controller {
    @Value("${string.str1}")
    private String str1;
    @PostConstruct
    public void construct1() {
        System.out.println("str1: " + str1);
    }
    @Value("${string.str2}")
    private String str2;
    @PostConstruct
    public void construct2() {
        System.out.println("str2: " + str2);
    }
    @Value("${string.str3}")
    private String str3;
    @PostConstruct
    public void construct3() {
        System.out.println("str3: " + str3);
    }
}

由上可知

  1. 字符串默认不用加上单引号或者双引号
  2. 单引号会转义特殊字符,特殊字符最终只是一个普通的字符串数据
  3. 双引号不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思
配置对象
yaml 复制代码
#自定义一个对象,两种写法
#student:
#  id: 1
#  name: zhangsan
#  age: 18
student: {id: 1, name: zhangsan, age: 18}

读取配置文件中的对象使用@ConfigurationProperties注解

java 复制代码
@Component
//三种写法
//@ConfigurationProperties(value = "student")
//@ConfigurationProperties(prefix = "student")
@ConfigurationProperties("student")
@Data //需要提供get,set方法才能够把配置文件的信息读取出来
public class Student {
    //类型和名字要一一对应
    private int id;
    private String name;
    private int age;
}
配置集合
yaml 复制代码
#自定义集合
#list:
#  array:
#    - 1
#    - 2
#    - 3
list: {array: [1,2,3]}

读取配置文件中的集合使用@ConfigurationProperties

java 复制代码
@Component
	@ConfigurationProperties("list")
	@Data
	public class MyList {
		private List<Integer> array;
	}

properties和yml的区别

  1. properties是以key=value的形式进行配置,而yml是使用类json格式。
  2. properties为早期且默认的配置文件格式,其配置存在一定的冗余数据,使用yml可以很好的解决数据冗余的问题
  3. yml通用性更好,支持多种语言,例如开发一个云服务器,可以使用同一份配置文件作为java和go的共同配置文件
  4. yml支持更多的数据类型

设置不同环境的配置文件

在一个项目中有多种环境,如开发环境,测试环境,生产环境。每个环境的配置项都有所不同,如何让一个配置文件适应不同的环境呢?

把配置文件设为生产环境

yaml 复制代码
spring:
  profiles:
    active: prod
yaml 复制代码
server:
  port: 9999
yaml 复制代码
server:
  port: 7777

此时使用的就是生产环境配置的端口号

相关推荐
向宇it14 分钟前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
小蜗牛慢慢爬行16 分钟前
Hibernate、JPA、Spring DATA JPA、Hibernate 代理和架构
java·架构·hibernate
星河梦瑾1 小时前
SpringBoot相关漏洞学习资料
java·经验分享·spring boot·安全
黄名富1 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
love静思冥想1 小时前
JMeter 使用详解
java·jmeter
言、雲1 小时前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
TT哇1 小时前
【数据结构练习题】链表与LinkedList
java·数据结构·链表
Yvemil72 小时前
《开启微服务之旅:Spring Boot 从入门到实践》(三)
java
Anna。。2 小时前
Java入门2-idea 第五章:IO流(java.io包中)
java·开发语言·intellij-idea
计算机学长felix2 小时前
基于SpringBoot的“交流互动系统”的设计与实现(源码+数据库+文档+PPT)
spring boot·毕业设计