SpringBoot 配置文件

1,啥是配置文件

大家应该都听过配置文件,它是为了解决硬编码问题的,把可能会修改的信息统一集中放到一个地方,重启程序时,直接在配置文件中读取,啥是硬编码,就是可能会需要修改的地方,比如数据库密码呀,字体大小呀等等,如果我们在代码中写死了,就叫做硬编码,有同学可能会有疑问了,我们自己去需修改代码再重启,跟修改配置文件,再重启有啥区别呢,仅仅是为了方便修改吗,还有两个好处,一个就是与代码分离,我们也不能把数据库密码啥的直接写代码上呀,到时候提交gitee不都知道了,还有一个区别就是,虽然都是重启程序,但是如果改代码,涉及打包,部署,可能改一次要几小时的时间,但是修改配置再启动只要秒级;


2,配置文件快速入手

打开Idea,

这个application.properties就是配置文件; 我们Spring启动的默认端口号是8080,我们来给他改成9090,先体验一下,

是可以正常访问的,我们来试试修改,

重新启动程序,再来访问刚才的接口,

代码运行时候已经告诉了,

访问不到了,修改成9090,

现在就能访问到了;


3,配置文件的格式

配饰文件有三种格式

1,application.properties

2,application.yml

3,application.yaml

这里yaml和yml是一样的,所以我们就讲yml,

properties和yml是可以共存的,并且properties的优先级是大于yml的,就是说,当properties和yml冲突了优先使用properties,我们最好还是使用统一的格式;


4,properties

早期配置文件格式

1,语法

以键值对形式,用=分隔key和Value,key的层级用.来分隔,

比如配置端口号和数据库信息,

java 复制代码
配置项⽬端⼝号
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

我们用#注释配置文件嗷;

2,读取

读取配置文件使用@value("")来注解来实现,并且括号中使用${}来读取参数,

我们来自定义配置,

自己随便定义就行,

来运行程序并访问,

3,缺点

大家现在都更喜欢使用yml,properties格式太冗余了,并且观感也不太好;


5,yml

1,语法

树形结构配置文件,key: value,重点最后: value这个:后面有一个空格

空格不可省略;

我们来看看

java 复制代码
spring:
  datasource:
    url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
    username: root
    password: root

一层一层都要分两个空格,同级的就不用空格分隔了;

2,配置不同的数据类型

java 复制代码
#字符串
string:
  value: 你好
#布尔
boolean:
  value: true
  value2: false
#整数
int:
  value: 12
#浮点数
float:
  value: 2.3
#空null不能直接用,这个字符有意义
null1:
  value: null
#空串,啥都不用加,可以加''区分一下
empty:
  value: ''

3,配置读取

读取配置文件的方式跟properties是一样的使用@value注解('${要读取的配置文件}')。

我们试试刚才那个int.value读取12;

java 复制代码
    @Value("${int.value}")
    private Integer b;
    
    @RequestMapping("get3")
    public String get3(){
        return "获取到的配置文件"+b;
    }

4,配置对象

java 复制代码
@Data
public class User {
    private Integer id;
    private String name;
    private Integer age;
}

先创建一个对象,再写配置;

java 复制代码
#配置对象
user:
  id: 1
  name: 张三
  age: 18
#行内写法
user2: {id: 1,name: 张三,age: 18}

这个得小写嗷,就算写了大写,Spring配置文件的机制也会自动把User转换成user

这个时候就不能使用@value注解了,

我们要使用@ConfigurationProperties注解来读取,具体使用方法呢,就是

@ConfigurationProperties(prefix = "配置文件的类名(不叫这玩意大家理解就好)")

java 复制代码
@ConfigurationProperties(prefix = "user")
@Configuration
@Data
public class User {
    private Integer id;
    private String name;
    private Integer age;
}

根据配置文件创建在把User交给Spring管理,

java 复制代码
    @Autowired
    private User user;
    @RequestMapping("get4")
    public String get4(){
        return user.toString();
    }

来看看运行结果:

成功获取嗷;

5,配置集合

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

我们配置文件中的name和list都要对应上,

java 复制代码
#配置集合
name:
  list:
    - 1
    - 2
    - 4
    - 6
    - 78
java 复制代码
    @Autowired
    private ListConfig listConfig;
    @RequestMapping("get5")
    public String get5(){
        return listConfig.toString();
    }

来看看运行结果:

6,配置Map

java 复制代码
@ConfigurationProperties(prefix = "maptypes")
@Configuration
@Data
public class MapConfig {
    private Map<String,Integer> map;
}
java 复制代码
maptypes:
  map:
    k1: 124124
    k2: 2141
    k3: 23523
java 复制代码
    @Autowired
    private MapConfig mapConfig;
    @RequestMapping("get6")
    public String get6(){
        return mapConfig.toString();
    }

7,yml优缺点

优点:

1,简便,可读性高,简洁,易于理解

2,支持更多的类型比如数组,map,对象

3,支持更多的编程语言,其他语言也能用

缺点:

1,格式要求严格,缺个空格就错了

2,对于复杂的配置可能太长了

相关推荐
zyplayer-doc2 小时前
VuePress类静态文档站和动态知识库怎么选:两种技术路线的适用场景
javascript·人工智能·后端·安全·智能手机
rannn_1112 小时前
【力扣hot100】链表专题|160、206、234、141、142
java·算法·leetcode·链表·面试·开发
IKUN家族4 小时前
Spring IoC&DI
java·spring·rpc
用户938515635074 小时前
从前后端分离到前端接口工程:React + MockJS + Vite 解析
前端·后端·全栈
码事漫谈4 小时前
世界由什么构成——这个问题比你想的更缠人
后端
摇滚侠5 小时前
《SpringBoot 3:入门与应用实战》第 2 章 IOC 思想与实现 阅读笔记 1
spring boot·笔记·后端
山荷枝5 小时前
03-框架--Spring
java·后端·spring
ChaHae-In5 小时前
SpringBoot统一功能处理
java·spring boot·后端
coder!mq6 小时前
说几个常见的语法糖?
java·开发语言·算法