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

相关推荐
ss2732 分钟前
Springboot + vue 医院管理系统
vue.js·spring boot·后端
霸道流氓气质4 分钟前
Java中Stream使用示例-对实体List分组且保留原数据顺序并对分组后的每组内的数据进行部分业务逻辑修改操作
java·list
间彧27 分钟前
InfluxDB详解与应用实战
后端
间彧32 分钟前
对比InfluxDB与Prometheus在监控场景下的特点及选型建议
后端
java1234_小锋37 分钟前
Spring事件监听的核心机制是什么?
java·spring·面试
间彧1 小时前
面向切面编程(AOP)中的“通知”和 专门用于增强 Spring MVC 中控制器(Controller)的“通知”
后端
逻极1 小时前
Rust数据类型(下):复合类型详解
开发语言·后端·rust
星释1 小时前
Rust 练习册 12:所有权系统
开发语言·后端·rust
间彧1 小时前
AOP中的五种通知类型在实际项目中如何选择?举例说明各自的典型应用场景
后端
间彧1 小时前
Spring Boot中很多Advice后缀的注解和类,都是干什么的
后端