前言
上一篇文章详细讲解了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格式的就不在介绍了,相信它很快就会被技术进步的车轮碾压过去。
另外,开发、测试、生产环境下的配置文件肯定是不一样的,如何进行多环境配置的切换也是必须要掌握的内容。
这次的全部代码会在文末附上下载地址,代码中注释也尽可能详细。
要掌握的内容
- 项目结构介绍
- 如何修改端口号
- 多个路径配置文件的优先级
- yaml简介
- 多环境切换配置
项目结构介绍
项目结构用一个图就能说完了,除了红框内容,.mvn、HELP.md、mvnw、mvnw.cmd可以删除,项目照样运行,建议尝试一下。
如何修改端口号
创建完SpringBoot项目之后,在/src/main/resources目录下,删掉application.properties,然后同样位置创建application.yaml,或者application.yml,二者都是系统能识别的yaml文件。
内容如下
把端口8080换成其它的,如8090,然后重启服务,会看到如下图,说明服务已经使用了8090端口
多位置配置文件的优先级
其实上面的配置文件只是创建项目时默认创建的配置文件,这个文件还可以放置在项目的其它位置,而且不同的位置有不同的加载优先级。
SpringBoot项目启动时,会从4个位置加载文件,这4个位置分别是:
- 项目根目录/config/application.yml
- 项目根目录/application.yml
- 项目根目录/src/main/resources/config/application.yml
- 项目根目录/src/main/resources/application.yml
接下来是重点:
- SpringBoot加载优先级与上面顺序一致,高优先级会覆盖低优先级的配置。
- SpringBoot会加载全部位置的配置文件,配置会互补。
通俗点解释:
- 都有的配置项,用优先级高的;
- 部分有的配置项,谁有用谁
验证配置文件优先级
4个位置都放置只有端口号不同的配置文件,分别运行和删除配置文件,看控制台输出的端口号。
验证配置互补
只在默认配置文件(/src/main/resources/application.yml)中增加访问路径的配置项
在浏览器中的体现
可以看出,优先级为1的配置文件中的端口号生效了,优先级为4的路径生效了,覆盖和互补都得到了体现。
多说一句:你觉得SpringBoot是怎么实现覆盖与互补的功能的呢?
yaml介绍
关于yaml的历史与发展就不多说了,直接上干货。
语法
- 大小定敏感
- 使用缩进表示层级关系
- 冒号后必须有空格
- 可以表示键值对、对象、列表
- 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); } }
输出
多环境切换配置
工作中,开发环境、测试环境、生产环境用到的端口、数据库连接参数都是不一样的,比如开发与测试一般都本地的数据库,如果每次都要修改配置文件肯定是不合适的。
多环境的切换可以在多个配置文件中进行,也可以在一个配置文件中完成。
通过多配置文件操作时,要在配置文件的文件中添加后缀,代表不同的环境。如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
验证多环境切换时,应该其它位置的配置文件全部注释掉。
运行主程序
主环境中,选择的也是prod,符合预期。
总结
本章的内容比较简单,经过验证之后,可以收藏起来,下次使用的时候能想起来从这里找就行了,学习技术不用死记,用的多了自然就记住了。
写的匆忙,难免有疏漏之处,如果有不明白的地方,请留言,我会在后面补充出来。
明天周末,好好休息。
代码地址:https://github.com/316620938/shop-springboot.git
相关文章
SpringBoot+Vue项目-01-创建项目后端