淘先锋技术网

首页 1 2 3 4 5 6 7

前言

上一篇文章详细讲解了SpringBoot项目的创建过程,以及如何对外提供接口服务。

我们访问的地址是:http://localhost:8080/hello,如果细心的话,还可以从控制台看到端口为8080的信息。8080端口是默认的端口,如果需要修改端口怎么处理?

SpringBoot有一个默认的配置文件application.properties,在这个文件中不仅可以配置端口,还可配置许多其它的配置项,如web、数据库、缓存、spring核心配置等,具体的配置项在官网https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html。

这是必学的内容,实际项目中一定会用到。修改端口是为了抛砖引玉,目的是为了在有配置需求的时候,可以通过文档查到自己想要的配置项。

SpringBoot默认使用的配置文件是application.properties,但官方推荐使用的是application.yaml,二者在作用上是相同的,但在语法格式上有较大区别。yaml格式的配置文件更简洁、更符合面向对象的思想,所以这里只对yaml文件做简要的介绍,propertirs格式的就不在介绍了,相信它很快就会被技术进步的车轮碾压过去。

另外,开发、测试、生产环境下的配置文件肯定是不一样的,如何进行多环境配置的切换也是必须要掌握的内容。

这次的全部代码会在文末附上下载地址,代码中注释也尽可能详细。

要掌握的内容

  1. 项目结构介绍
  2. 如何修改端口号
  3. 多个路径配置文件的优先级
  4. yaml简介
  5. 多环境切换配置

项目结构介绍

项目结构用一个图就能说完了,除了红框内容,.mvn、HELP.md、mvnw、mvnw.cmd可以删除,项目照样运行,建议尝试一下。

e1f70fdcee53b00a911977c5c055c056.png

如何修改端口号

创建完SpringBoot项目之后,在/src/main/resources目录下,删掉application.properties,然后同样位置创建application.yaml,或者application.yml,二者都是系统能识别的yaml文件。

内容如下

601b8aaae790da5c04ed8e6e4234f9d6.png

把端口8080换成其它的,如8090,然后重启服务,会看到如下图,说明服务已经使用了8090端口

d726e3db9be9575ca1c8a6d4e766612d.png

多位置配置文件的优先级

其实上面的配置文件只是创建项目时默认创建的配置文件,这个文件还可以放置在项目的其它位置,而且不同的位置有不同的加载优先级。

SpringBoot项目启动时,会从4个位置加载文件,这4个位置分别是:

  1. 项目根目录/config/application.yml
  2. 项目根目录/application.yml
  3. 项目根目录/src/main/resources/config/application.yml
  4. 项目根目录/src/main/resources/application.yml

接下来是重点:

  1. SpringBoot加载优先级与上面顺序一致,高优先级会覆盖低优先级的配置。
  2. SpringBoot会加载全部位置的配置文件,配置会互补。

通俗点解释:

  • 都有的配置项,用优先级高的;
  • 部分有的配置项,谁有用谁

验证配置文件优先级

4个位置都放置只有端口号不同的配置文件,分别运行和删除配置文件,看控制台输出的端口号。

验证配置互补

只在默认配置文件(/src/main/resources/application.yml)中增加访问路径的配置项

1da2b9403b1fc99bd356541229cc8f00.png

在浏览器中的体现

bc35ae3d4cb809d6bc22d4ffb1ed93f2.png

可以看出,优先级为1的配置文件中的端口号生效了,优先级为4的路径生效了,覆盖和互补都得到了体现。

多说一句:你觉得SpringBoot是怎么实现覆盖与互补的功能的呢?

yaml介绍

关于yaml的历史与发展就不多说了,直接上干货。

语法

  1. 大小定敏感
  2. 使用缩进表示层级关系
  3. 冒号后必须有空格
  4. 可以表示键值对、对象、列表
  5. yml文件中使用#注释
 # -----这一部分展示了yml的格式,记住冒号后面必须有一个空格 #1、用键值对表示简单的对象 age: 12  #2、使用缩进表示对象 person:   name: 张三   age: 22 #3、对象的行内写法 user: {name: 李四, age: 33} #4、数组的缩进写法 animals:   - dog   - cat   - fish   - tiger #5、数组的行内写法 animals2: [dog, cat ,fish, tiger]  #6、包含复杂对象的数组 familys:   -     id: 1     name: 无忌     age: 23   -     id: 2     name: 张三丰     age: 95  familys2: [{id: 1,name: 无忌, age: 23},{id: 2,name: 张三丰, age: 95}]

既然可以在yml中定义数据,也可以把数据注入到实体类中。

在/com/hgt/pojo下面创建Person.java,如果目录请自己创建

注入

 package com.hgt.pojo;  import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;  @Component @ConfigurationProperties(prefix = "person") public class Person {     private String name;     private Integer age;      public Person() {     }      public Person(String name, Integer age) {         this.name = name;         this.age = age;     }      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     }      public Integer getAge() {         return age;     }      public void setAge(Integer age) {         this.age = age;     }      @Override     public String toString() {         return "Person{" +                 "name='" + name + ''' +                 ", age=" + age +                 '}';     } }

注解的作用:

  • @Component:表明一个类会作为组件类,并告知Spring要为这个类创建bean。
  • @ConfigurationProperties(prefix = "person"):将配置文件中的person对象注入到该对象中

单元测试代码

 package com.hgt;  import com.hgt.pojo.Person; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest;  @SpringBootTest class MainAppTests {     @Autowired     private Person person;     @Test     void contextLoads() {         System.out.println(person);     } }

输出

863d54493b790179540e4c393bc97013.png

多环境切换配置

工作中,开发环境、测试环境、生产环境用到的端口、数据库连接参数都是不一样的,比如开发与测试一般都本地的数据库,如果每次都要修改配置文件肯定是不合适的。

多环境的切换可以在多个配置文件中进行,也可以在一个配置文件中完成。

通过多配置文件操作时,要在配置文件的文件中添加后缀,代表不同的环境。如application-dev.yml代表开发环境,同理application-test.yml和application-prod.yml代表测试和生产环境。而application.yml代表主环境,在主环境中通过sping.profiles.active=dev/test/prod来激活对应的环境。

通过单个配置文件操作时,只是把不同的环境配置在了主环境中,最终还是通过sping.profiles.active=dev/test/prod来激活对应的环境。

既然一个文件可以完成,又何必要用多文件呢?所以这里只介绍单配置文件下的多环境切换。

 #-----演示多环境的切换,  #  多环境配置,激活生产环境 spring:   profiles:     active: prod      # 注意:多个环境之间使用---分隔 #开发环境 --- server:   port: 8081 spring:   config:     activate:       on-profile: dev   #测试环境 --- server:   port: 8082  spring:   config:     activate:       on-profile: test  #生产环境 --- server:   port: 8083 spring:   config:     activate:       on-profile: prod

验证多环境切换时,应该其它位置的配置文件全部注释掉。

运行主程序

9ea0ab7a3a9dee48c483a73b66c61e82.png

主环境中,选择的也是prod,符合预期。

总结

本章的内容比较简单,经过验证之后,可以收藏起来,下次使用的时候能想起来从这里找就行了,学习技术不用死记,用的多了自然就记住了。

写的匆忙,难免有疏漏之处,如果有不明白的地方,请留言,我会在后面补充出来。

明天周末,好好休息。

代码地址:https://github.com/316620938/shop-springboot.git

相关文章

SpringBoot+Vue项目-01-创建项目后端