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

相关推荐
Maỿbe12 分钟前
阻塞队列的学习以及模拟实现一个阻塞队列
java·数据结构·线程
we风1 小时前
【SpringCache 提供的一套基于注解的缓存抽象机制】
java·缓存
趙卋傑3 小时前
网络编程套接字
java·udp·网络编程·tcp
两点王爷3 小时前
Java spingboot项目 在docker运行,需要含GDAL的JDK
java·开发语言·docker
万能螺丝刀16 小时前
java helloWord java程序运行机制 用idea创建一个java项目 标识符 关键字 数据类型 字节
java·开发语言·intellij-idea
zqmattack6 小时前
解决idea与springboot版本问题
java·spring boot·intellij-idea
Hygge-star6 小时前
【Java进阶】图像处理:从基础概念掌握实际操作
java·图像处理·人工智能·程序人生·职场和发展
Honmaple6 小时前
IDEA修改JVM内存配置以后,无法启动
java·ide·intellij-idea
Humbunklung6 小时前
Rust 编程实现猜数字游戏
开发语言·后端·rust
abcnull6 小时前
mybatis的mapper对应的xml写法
xml·sql·spring·mybatis·mapper