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

相关推荐
微风粼粼8 分钟前
程序员在线接单
java·jvm·后端·python·eclipse·tomcat·dubbo
缘来是庄12 分钟前
设计模式之中介者模式
java·设计模式·中介者模式
rebel41 分钟前
若依框架整合 CXF 实现 WebService 改造流程(后端)
java·后端
极客悟道1 小时前
颠覆传统虚拟化:在Docker容器中运行Windows系统的开源黑科技
前端·后端
调试人生的显微镜1 小时前
WebView 中 Cookie 丢失怎么办?跨域状态不同步的调试与修复经验
后端
weixin_437398212 小时前
转Go学习笔记(2)进阶
服务器·笔记·后端·学习·架构·golang
极客悟道2 小时前
巧解 Docker 镜像拉取难题:无需梯子和服务器,拉取数量无限制
后端·github
代码的余温2 小时前
5种高效解决Maven依赖冲突的方法
java·maven
慕y2742 小时前
Java学习第十六部分——JUnit框架
java·开发语言·学习
paishishaba2 小时前
Maven
java·maven