一、 配置文件格式

我们现在启动服务器默认的端口号是 8080,访问路径可以书写为

  1. http://localhost:8080/books/1

在线上环境我们还是希望将端口号改为 80,这样在访问的时候就可以不写端口号了,如下

  1. http://localhost/books/1

SpringBoot 程序如何修改呢?SpringBoot 提供了多种属性配置方式

  • application.properties

    1. server.port=80
  • application.yml

    1. server:
    2. port: 81
  • application.yaml

    1. server:
    2. port: 82

注意:SpringBoot 程序的配置文件名必须是 application ,只是后缀名不同而已。

1.1 环境准备

延用Java开发学习(三十五)----SpringBoot快速入门及起步依赖解析里面的环境,结构如下

在该工程中的 com.itheima.controller 包下创建一个名为 BookController 的控制器。内容如下:

  1. @RestController
  2. @RequestMapping("/books")
  3. public class BookController {

  4.    @GetMapping("/{id}")
  5.    public String getById(@PathVariable Integer id){
  6.        System.out.println("id ==> "+id);
  7.        return "hello , spring boot!";
  8.   }
  9. }

1.2 不同配置文件演示

  • application.properties配置文件

现在需要进行配置,配合文件必须放在 resources 目录下,而该目录下有一个名为 application.properties 的配置文件,我们就可以在该配置文件中修改端口号,在该配置文件中书写 port 。

application.properties 配置文件内容如下:

  1. server.port=80

启动服务,会在控制台打印出日志信息,从日志信息中可以看到绑定的端口号已经修改了

  • application.yml配置文件

删除 application.properties 配置文件中的内容。在 resources 下创建一个名为 application.yml 的配置文件,在该文件中书写端口号的配置项,格式如下:

  1. server:
  2. port: 81

注意: 在:后,数据前一定要加空格。

启动服务,可以在控制台看到绑定的端口号是 81

  • application.yaml配置文件

删除 application.yml 配置文件和 application.properties 配置文件内容,然后在 resources 下创建名为 application.yaml 的配置文件,配置内容和后缀名为 yml 的配置文件中的内容相同,只是使用了不同的后缀名而已

application.yaml 配置文件内容如下:

  1. server:
  2. port: 83

启动服务,在控制台可以看到绑定的端口号

1.3 三种配置文件的优先级

在三种配合文件中分别配置不同的端口号,启动服务查看绑定的端口号。用这种方式就可以看到哪个配置文件的优先级更高一些

application.properties 文件内容如下:

  1. server.port=80

application.yml 文件内容如下:

  1. server:
  2. port: 81

application.yaml 文件内容如下:

  1. server:
  2. port: 82

启动服务,在控制台可以看到使用的端口号是 80。说明 application.properties 的优先级最高

注释掉 application.properties 配置文件内容。再次启动服务,在控制台可以看到使用的端口号是 81,说明 application.yml 配置文件为第二优先级。

从上述的验证结果可以确定三种配置文件的优先级是:

application.properties > application.yml > application.yaml

yml格式一般最常使用

二、yaml格式

上面讲了三种不同类型的配置文件,而 properties 类型的配合文件之前我们学习过,接下来我们重点介绍 yaml 类型的配置文件。

YAML(YAML Ain't Markup Language),一种数据序列化格式。这种格式的配置文件在近些年已经占有主导地位,那么这种配置文件和前期使用的配置文件是有一些优势的,我们先看之前使用的配置文件。

最开始我们使用的是 xml ,格式如下:

  1. <enterprise>
  2.    <name>itcast</name>
  3.    <age>16</age>
  4.    <tel>4006184000</tel>
  5. </enterprise>

properties 类型的配置文件如下

  1. enterprise.name=itcast
  2. enterprise.age=16
  3. enterprise.tel=4006184000

yaml 类型的配置文件内容如下

  1. enterprise:
  2. name: itcast
  3. age: 16
  4. tel: 4006184000

优点:

  • 容易阅读

    yaml 类型的配置文件比 xml 类型的配置文件更容易阅读,结构更加清晰

  • 容易与脚本语言交互

  • 以数据为核心,重数据轻格式

    yaml 更注重数据,而 xml 更注重格式

YAML 文件扩展名:

  • .yml (主流)

  • .yaml

上面两种后缀名都可以,以后使用更多的还是 yml 的。

2.1 语法规则

  • 大小写敏感

  • 属性层级关系使用多行描述,每行结尾使用冒号结束

  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)

    空格的个数并不重要,只要保证同层级的左侧对齐即可。

  • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)

  • # 表示注释

核心规则:数据前面要加空格与冒号隔开

数组数据在数据书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔,例如

  1. enterprise:
  2. name: itcast
  3. age: 16
  4. tel: 4006184000
  5. subject:
  6.   - Java
  7.   - 前端
  8.   - 大数据

三、3种yaml配置文件数据读取

3.1 环境准备

新创建一个名为 springboot_03_read_dataSpringBoot 工程,参考Java开发学习(三十五)----SpringBoot快速入门及起步依赖解析,目录结构如下

com.itheima.controller 包写创建名为 BookController 的控制器,内容如下

  1. @RestController
  2. @RequestMapping("/books")
  3. public class BookController {

  4.    @GetMapping("/{id}")
  5.    public String getById(@PathVariable Integer id){
  6.        System.out.println("id ==> "+id);
  7.        return "hello , spring boot!";
  8.   }
  9. }

com.itheima.domain 包下创建一个名为 Enterprise 的实体类等会用来封装数据,内容如下

  1. public class Enterprise {
  2.    private String name;
  3.    private int age;
  4.    private String tel;
  5.    private String[] subject;
  6.    
  7.    //setter and getter
  8.    
  9.    //toString
  10. }

resources 下创建一个名为 application.yml 的配置文件,里面配置了不同的数据,内容如下

  1. lesson: SpringBoot

  2. server:
  3. port: 80

  4. enterprise:
  5. name: itcast
  6. age: 16
  7. tel: 4006184000
  8. subject:
  9.   - Java
  10.   - 前端
  11.   - 大数据

3.2 读取配置数据

3.2.1 使用 @Value注解

使用 @Value("表达式") 注解可以从配合文件中读取数据,注解中用于读取属性名引用方式是:${一级属性名.二级属性名……}

我们可以在 BookController 中使用 @Value 注解读取配合文件数据,如下

  1. @RestController
  2. @RequestMapping("/books")
  3. public class BookController {
  4.    
  5.    @Value("${lesson}")
  6.    private String lesson;
  7.    @Value("${server.port}")
  8.    private Integer port;
  9.    @Value("${enterprise.subject[0]}")
  10.    private String subject_00;

  11.    @GetMapping("/{id}")
  12.    public String getById(@PathVariable Integer id){
  13.        System.out.println(lesson);
  14.        System.out.println(port);
  15.        System.out.println(subject_00);
  16.        return "hello , spring boot!";
  17.   }
  18. }

使用postman调接口

可以看到结果已经返回

3.2.2 Environment对象

上面方式读取到的数据特别零散,SpringBoot 还可以使用 @Autowired 注解注入 Environment 对象的方式读取数据。这种方式 SpringBoot 会将配置文件中所有的数据封装到 Environment 对象中,如果需要使用哪个数据只需要通过调用 Environment 对象的 getProperty(String name) 方法获取。具体代码如下:

  1. @RestController
  2. @RequestMapping("/books")
  3. public class BookController {
  4.    
  5.    @Autowired
  6.    private Environment env;
  7.    
  8.    @GetMapping("/{id}")
  9.    public String getById(@PathVariable Integer id){
  10.        System.out.println(env.getProperty("lesson"));
  11.        System.out.println(env.getProperty("enterprise.name"));
  12.        System.out.println(env.getProperty("enterprise.subject[0]"));
  13.        return "hello , spring boot!";
  14.   }
  15. }

注意:这种方式,框架内容大量数据,框架使用的比较多,而在开发中我们很少使用。

3.2.3 自定义对象

SpringBoot 还提供了将配置文件中的数据封装到我们自定义的实体类对象中的方式。具体操作如下:

  • 将实体类 bean 的创建交给 Spring 管理。

    在类上添加 @Component 注解

  • 使用 @ConfigurationProperties 注解表示加载配置文件

    在该注解中也可以使用 prefix 属性指定只加载指定前缀的数据

  • BookController 中进行注入

具体代码如下:

Enterprise 实体类内容如下:

  1. @Component
  2. @ConfigurationProperties(prefix = "enterprise")
  3. public class Enterprise {
  4.    private String name;
  5.    private int age;
  6.    private String tel;
  7.    private String[] subject;

  8.    public String getName() {
  9.        return name;
  10.   }

  11.    public void setName(String name) {
  12.        this.name = name;
  13.   }

  14.    public int getAge() {
  15.        return age;
  16.   }

  17.    public void setAge(int age) {
  18.        this.age = age;
  19.   }

  20.    public String getTel() {
  21.        return tel;
  22.   }

  23.    public void setTel(String tel) {
  24.        this.tel = tel;
  25.   }

  26.    public String[] getSubject() {
  27.        return subject;
  28.   }

  29.    public void setSubject(String[] subject) {
  30.        this.subject = subject;
  31.   }

  32.    @Override
  33.    public String toString() {
  34.        return "Enterprise{" +
  35.                "name='" + name + '\'' +
  36.                ", age=" + age +
  37.                ", tel='" + tel + '\'' +
  38.                ", subject=" + Arrays.toString(subject) +
  39.                '}';
  40.   }
  41. }

BookController 内容如下:

  1. @RestController
  2. @RequestMapping("/books")
  3. public class BookController {
  4.    
  5.    @Autowired
  6.    private Enterprise enterprise;

  7.    @GetMapping("/{id}")
  8.    public String getById(@PathVariable Integer id){
  9.        System.out.println(enterprise.getName());
  10.        System.out.println(enterprise.getAge());
  11.        System.out.println(enterprise.getSubject());
  12.        System.out.println(enterprise.getTel());
  13.        System.out.println(enterprise.getSubject()[0]);
  14.        return "hello , spring boot!";
  15.   }
  16. }

注意:使用第三种方式,在实体类上有如下警告提示

这个警告提示解决是在 pom.xml 中添加如下依赖即可

  1. <dependency>
  2.    <groupId>org.springframework.boot</groupId>
  3.    <artifactId>spring-boot-configuration-processor</artifactId>
  4.    <optional>true</optional>
  5. </dependency>

Java开发学习(三十六)----SpringBoot三种配置文件解析的更多相关文章

  1. Java开发学习(二十六)----SpringMVC返回响应结果

    SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...

  2. Java开发学习(二十二)----Spring事务属性、事务传播行为

    一.事务配置 上面这些属性都可以在@Transactional注解的参数上进行设置. readOnly:true只读事务,false读写事务,增删改要设为false,查询设为true. timeout ...

  3. Java开发学习(二十四)----SpringMVC设置请求映射路径

    一.环境准备 创建一个Web的Maven项目 参考Java开发学习(二十三)----SpringMVC入门案例.工作流程解析及设置bean加载控制中环境准备 pom.xml添加Spring依赖 < ...

  4. Java开发学习(二十五)----使用PostMan完成不同类型参数传递

    一.请求参数 请求路径设置好后,只要确保页面发送请求地址和后台Controller类中配置的路径一致,就可以接收到前端的请求,接收到请求后,如何接收页面传递的参数? 关于请求参数的传递与接收是和请求方 ...

  5. Java开发学习(二十八)----拦截器(Interceptor)详细解析

    一.拦截器概念 讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源 (3)如 ...

  6. Java开发学习(四十)----MyBatisPlus入门案例与简介

    一.入门案例 MybatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发.提供效率. SpringBoot它能快速构建Spring开发环境用以整合其他技术,使用起来 ...

  7. java web学习总结(十六) -------------------数据库连接池

    一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...

  8. Java基础学习笔记十六 集合框架(二)

    List List接口的特点: 它是一个元素存取有序的集合.例如,存元素的顺序是11.22.33.那么集合中,元素的存储就是按照11.22.33的顺序完成的. 它是一个带有索引的集合,通过索引就可以精 ...

  9. Java开发笔记(十六)非此即彼的条件分支

    前面花了大量篇幅介绍布尔类型及相应的关系运算和逻辑运算,那可不仅仅是为了求真值或假值,更是为了通过布尔值控制流程的走向.在现实生活中,常常需要在岔路口抉择走去何方,往南还是往北,向东还是向西?在Jav ...

随机推荐

  1. 【新人福利】使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:https://t.csdnimg.cn/PVqS

    [新人福利]使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:CSDN开发助手 [新人福利]使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:https ...

  2. 加强版:合并果子[NOIP2004]

    题目 链接:https://ac.nowcoder.com/acm/contest/26887/1001 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K, ...

  3. [USACO 2009 Mar S]Look Up_via牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28537/N 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...

  4. 使用uni-app 地图组件

    首先,官方文档:https://uniapp.dcloud.io/component/map.html so,easy 但是没什么用~--~,太简单了 uni-app一般内置的使用的是腾讯地图,这个组 ...

  5. banner.txt的图案

    根据网上的图片的url生成图片: url的后缀是图片后缀(GIF, JPG, or PNG)才能转换,而像我图片下面的一般不能用(要靠运气,我就成功了) https://www.degraeve.co ...

  6. 设置Windows Server 2022、Win10、Win11自动登录的简单方法-OK

    这里介绍自己从使用 Windows Server 2003 到 Windows Server 2022 一直都在使用的自动登录系统的方法,屡试不爽.网上讨论的方法太繁琐,所以共享出来,供大家参考.该方 ...

  7. Spring源码 13 IOC refresh方法8

    本文章基于 Spring 5.3.15 Spring IOC 的核心是 AbstractApplicationContext 的 refresh 方法. 其中一共有 13 个主要方法,这里分析第 8 ...

  8. ASP.Net Core异步编程

    ASP.Net Core异步编程 概念 什么是异步编程? 异步编程是可以让程序并行运行的一种手段,其可以让程序中的一个工作单元与主应用程序线程分开独立运行,并且在工作单元运行结束后,会通知主应用程序线 ...

  9. 如何免费申请js.org二级域名

    最近看到很多人都去申请了js.org的域名,我就来写个教程吧! (本教程只注重于申请域名,而不是如何使用Github) 看看成品:https://butterfly.js.org/ 官网是这么写的: ...

  10. Ubuntu20.04配置 ES7.17.0集群

    Ubuntu20.04配置 ES7.17.0集群 ES能做什么? elasticsearch简写es,es是一个高扩展.开源的全文检索和分析引擎,它可以准实时地快速存储.搜索.分析海量的数据. Ubu ...