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,对于复杂的配置可能太长了

相关推荐
Code小翊4 分钟前
堆的基础操作,C语言示例
java·数据结构·算法
高山上有一只小老虎21 分钟前
idea中设置快捷键风格
java·ide·intellij-idea
JH307322 分钟前
IDEA自带的Maven安装位置
java·maven·intellij-idea
武子康23 分钟前
大数据-128 - Flink 并行度详解:从概念到最佳实践,一文读懂任务并行执行机制 代码示例与性能优化
大数据·后端·flink
Q_Q51100828527 分钟前
python+uniapp基于微信小程序的学院设备报修系统
spring boot·python·微信小程序·django·flask·uni-app
小毛驴8501 小时前
在Spring Boot开发中,HEAD、OPTIONS和 TRACE这些HTTP方法各有其特定的应用场景和实现方式
spring boot·后端·http
梵得儿SHI1 小时前
Java 反射机制核心类详解:Class、Constructor、Method、Field
java·开发语言·反射·class·constructor·java反射·java反射机制
迎風吹頭髮1 小时前
Linux内核架构浅谈44-Linux slab分配器:通用缓存与专用缓存的创建与使用
linux·spring·架构
m0_736927041 小时前
想抓PostgreSQL里的慢SQL?pg_stat_statements基础黑匣子和pg_stat_monitor时间窗,谁能帮你更准揪出性能小偷?
java·数据库·sql·postgresql
Jabes.yang1 小时前
Java面试大作战:从缓存技术到音视频场景的探讨
java·spring boot·redis·缓存·kafka·spring security·oauth2