hi,大家好,今天为大家带来Spring Boot 的配置文件相关的知识
所有要存放在容器中的类必须要放到和启动类同一个目录或者启动类子目录的类,否则不能运行
项目的所有的重要的文件都是在配置文件中配置的
比如数据库的连接信息,以及日志文件等
如果没有配置文件,Spring Boot项目就不能连接和操作数据库,不能保存日志,所以配置文件非常重要
1.properties
2.yml
properties是Spring Boot项目默认的配置文件,yml是新的款式,下面我们来分别介绍一下
1.properties 可以和 yml ⼀起存在于⼀个项⽬当中,当 properties 和 yml ⼀起存在⼀个项
⽬中时,如果配置⽂件中出现了同样的配置,那么这个时候会以 properties 中的配置为主,也就是 .properties 配置⽂件的优先级最⾼,但加载完 .properties ⽂件之后,也会加载 .yml ⽂件的配置信息
举个例子
运行结果
2. properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种统⼀的配
置⽂件格式
properties是键值对的形式进行配置的,key和value用=连接
配置文件用#表示注释
这里来说一下配置文件里面的配置类型分类
1.系统配置项 给系统(框架)使用
2.用户自定义配置(开发者自己使用)
开始讲解之前我们来做一下热部署,什么是热部署?
热部署就是不用手动重启项目就能自动启动项目
我们之前在创建项目的时候已经添加了spring-dev-tool依赖,那么就做下一步.在ideasettings设置里面找到
然后打开
进行一样的步骤.也就是为当前项目配置,也为新项目配置
我们来读取一下配置文件下的用户自定义配置
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* Created with IntelliJ IDEA.
* Description:
* User: WHY
* Date: 2023-08-01
* Time: 9:43
*/
@Controller
@ResponseBody
public class TestController {
//从配置项读取配置
@Value("${success.path}")
//赋值给一个变量
private String way;
@RequestMapping("/sayhi")
public String sayHi(){
return "hello ,world"+way;
}
}
我们来拿配置数据库举例子
# MySQL 配置项
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/myblog
spring.datasource.username=root
spring.datasource.password=12345678
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
缺点:spring.datasource是不可以删掉的,写起来就比较麻烦冗余
优点:语法简单,适合初学者
是树形结构的配置⽂件,它的基础语法是“key: value”,注意 key 和 value 之间使⽤英⽂冒汗加空格的⽅式组成的,其中的空格不可省略
如果少了一个空格,
这里可以看到,稍有不慎就会错误
先来看yml格式的数据库配置
spring:
datasource:
url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
username: root
password: root
优点:
1.易读性强,缩进语法使其更加易于理解;支持注释,能够让文件更易于维护;
2.可以表示不同的数据类型,如字符串、整数、浮点数、列表、字典等;
3.可以轻松地与各种编程语言集成,例如Python、Java、Ruby等;
4.与XML、JSON等格式相比,文件体积小,易于传输和处理。
缺点:
1.对数据结构的描述有时可能不够明确,可能需要更多的文档来澄清数据类型的定义;
2.某些语言可能不支持YML文件格式,需要使用第三方库或工具进行转换;
3.没有标准的YML文件格式规范,可能存在一些语法差异和不兼容。 总的来说,YML格式在某些情况下非常有用和方便,但也有一些限制和约束
# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制
# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法
# Null,~代表null
null.value: ~
yml还可以定义一个对象
#自定义对象
myobj:
id: 85
name: 王一博
age: 25
来配置读取对象的某一个属性
就拿上面的举例子
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.PostConstruct;
/**
* Created with IntelliJ IDEA.
* Description:
* User: WHY
* Date: 2023-08-01
* Time: 16:34
*/
@Controller
@ResponseBody
@RequestMapping("/user")
public class UserController {
@Value("${myobj.name}")
private String name1;
@PostConstruct
public void doPost(){
System.out.println(name1);
}
}
package com.example.demo.model;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* Created with IntelliJ IDEA.
* Description:
* User: WHY
* Date: 2023-08-01
* Time: 16:46
*/
@ConfigurationProperties("myobj")
@Component
public class person {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
@Controller
@ResponseBody
@RequestMapping("/user")
public class UserController {
@Autowired private person p;
@PostConstruct
public void doPost(){
System.out.println(p.toString());
}
}
看一下这两个注解
现在不使用@Value了
使⽤注解@ConfigurationProperties 来读取配置文件
加五大注解的其中之一的目的是让该类随着springBoot项目的启动而注入,然后才能让配置文件的信息设置到该类中,运行结果已经粘贴在上面了
配置⽂件也可以配置 list 集合,如下所示
yml格式
dbinformation:
name:
- mysql
- sqlserver
- db2
#行内写法
dbinformation: {name: [mysql,sqlserver,db2]}
配置文件读取,和对象的读取类似
新建一个类
package com.example.demo.model;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* Description:
* User: WHY
* Date: 2023-08-01
* Time: 17:24
*/
@ConfigurationProperties("dbinformation")
@Component
@Data
public class User {
private List<String> name;
}
@Controller
@ResponseBody
@RequestMapping("/user")
public class UserController {
3 @Autowired
private User user;
@PostConstruct
public void doPost(){
System.out.println(user.toString());
}
}
properties和yml都是用于配置文件的格式,在Java应用程序中都有广泛的应用。它们的主要区别如下:
properties | yml | |
---|---|---|
格式 | 以键值对的形式存储,每个键值对之间用等号连接 | 使用缩进来表示层级关系,key 和 value 之间使⽤“: ”英⽂冒号加空格的⽅式设置,并且空格不可省略 |
可读性 | 冗余复杂 | yml文件因为采用缩进的方式,使得配置文件结构更加清晰,可读性更好 |
功能 | properties文件只支持基本的键值对 | yml文件支持更多的数据结构,如数组和嵌套结构等 |
通用性 | 最早期的配置⽂件格式,也是创建 Spring Boot 项⽬默认的配置⽂件 | ⽀持更多语⾔,如 Java、Go、Python 等 |
这个是spring官网的资料,有需要的铁铁可以看看
https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html
创建不同环境的配置⽂件:
application-dev.properties
application-prod.properties
application-test.properties
server.port=8888
只有横杠后面的才能改,其余不能改,这个也是约定大于配置思想的体现
在 application.properties 中设置运⾏环境
# 指定配置文件的运行环境
spring.profiles.active=test
今天的讲解就到这里,我们下期再见了,886