网站呼叫中心 建设工期,正规的网站建设公司,电脑网页图片,职业技能培训网SpringBoot配置文件1. 配置文件格式1.1 application.properties配置文件1.2 application.yml配置文件1.3 application.yaml配置文件1.4 三种配置文件优先级和区别2. yaml格式2.1 语法规则2.2 yaml书写2.2.1 字面量#xff1a;单个的、不可拆分的值2.2.2 数组#xff1a;一组按…
SpringBoot配置文件1. 配置文件格式1.1 application.properties配置文件1.2 application.yml配置文件1.3 application.yaml配置文件1.4 三种配置文件优先级和区别2. yaml格式2.1 语法规则2.2 yaml书写2.2.1 字面量单个的、不可拆分的值2.2.2 数组一组按次序排列的值2.2.3 对象键值对的集合2.2.4 复合结构2.3 ymal组织结构3. yaml配置文件数据读取3.1 使用功能Value注解3.2 Enviroment对象3.3 自定义对象4. 多环境配置4.1 yml/yaml文件进行多环境配置4.2 properties文件进行多环境配置4.3 命令行启动参数设置5. 配置文件分类1. 配置文件格式
我们启动服务器的默认端口是8080我们怎样修改成自己设定的端口呐比如设定为80端口那么以后访问的时候就可以直接写http://localhost/xxx,而不用写端口号了。SpringBoot已经为我们想到了为我们提供了三种配置文件可以进行相关配置分别为application.propertiesapplication.ymlapplication.yaml。可以观察到三种配置文件都是以application.开头的这是因为SpringBoot要求配置文件名字一定要为application.开头。下面我们一起了解一下吧。
1.1 application.properties配置文件
创建SpringBoot项目会在resources目录下自动创建一个application.properties配置文件例如在配置文件中设置服务端口号为8089.
1.2 application.yml配置文件
注释掉application.properties配置文件中的端口设置在resources目录下创建名为application.yml配置文件在该文件中书写端口号的配置项格式如下
server:port: 8090注意 在:后数据前一定要加空格。 1.3 application.yaml配置文件
注释掉application.yml配置文件中的端口设置在resources目录下创建名为application.yaml配置文件在该文件中书写端口号的配置项格式如下
server:port: 8091注意 在:后数据前一定要加空格。 注意如果创建的 application.yml 和 application.yaml 没有自动提示功能可以参考下图把配置文件添加Configuration Files。 1.4 三种配置文件优先级和区别
经过对上面三种配置文件的介绍那么问题来了
这三种配置文件优先级是怎样的呐这三种配置文件有什么区别吗
针对第一个问题我们可以做一个实验在三个配置文件中配置不同的端口启动服务器查看显示的是哪一个端口就可以确定那个配置文件的优先级高。 application.properties: 8089 application.yml: 8090 application.yaml:8091 经实验证明application.properties配置文件的优先级要高于application.yml 和 application.yaml。
那么下面我们注释掉application.properties中的端口再次启动服务器进行查看。 经实验证明application.yml 配置文件的优先级要高于 application.yaml。
经上述实验证明三种配置文件的优先级为application.properties application.yml application.yaml。
针对问题2则三种配置文件有什么区别呐
区别1定义和定位不同
properties 翻译成中文是“属性”的意思所以它在创建之初就是用来在 Spring Boot 中设置属性的。yml 是 YAML 是缩写它的全称 Yet Another Markup Language翻译成中文是“另一种标记语言”。所以从二者的定义可以看出它们的定位和层次是完全不同的properties 只是用来设置一些属性配置的而 yml 的格局和愿景更大它的定位是“另一种标记语言”所以从格局上来讲 yml 就甩 properties 好几条街。
区别2语法不同 properties 和 yml 语法区别很大
区别3yml 更好的配置多种数据类型
yml 除了可以很好的配置基础数据类型之外它还可以很方便的配置对象、集合等数据类型。
区别4yml 可以跨语言
properties 格式的配置文件只适用于 Spring Boot 项目也就是只适用于 Java 语言而 yml 支持更多的开发语言它可以用在 Java、PHP、Python、Ruby、JavaScript、Perl、Golang 等语言中。
2. yaml格式
YAMLYAML Aint Markup Language一种数据序列化格式。这种格式的配置文件在近些年已经占有主导地位
xml 格式如下
enterprisenameitcast/nameage16/agetel4006184000/tel
/enterprise而 properties 类型的配置文件如下
enterprise.nameitcast
enterprise.age16
enterprise.tel4006184000yaml 类型的配置文件内容如下
enterprise:name: itcastage: 16tel: 4006184000优点 容易阅读 yaml 类型的配置文件比 xml 类型的配置文件更容易阅读结构更加清晰 容易与脚本语言交互 以数据为核心重数据轻格式 yaml 更注重数据而 xml 更注重格式
YAML 文件扩展名
.yml (主流).yaml
上面两种后缀名都可以目前比较流行的是 yml 。
2.1 语法规则 大小写敏感 属性层级关系使用多行描述每行结尾使用冒号结束 使用缩进表示层级关系同层级左侧对齐只允许使用空格不允许使用Tab键 空格的个数并不重要只要保证同层级的左侧对齐即可。 属性值前面添加空格属性名与属性值之间使用冒号空格作为分隔 # 表示注释
核心规则数据前面要加空格与冒号隔开
数组数据在数据书写位置的下方使用减号作为数据开始符号每行书写一个数据减号与数据间空格分隔。
2.2 yaml书写
2.2.1 字面量单个的、不可拆分的值
字面量是指单个的不可拆分的值例如数字、字符串、布尔值、以及日期等。
在 YAML 中使用“key:[空格]value”的形式表示一对键值对空格不能省略如 url: www.biancheng.net。
字面量直接写在键值对的“value”中即可且默认情况下字符串是不需要使用单引号或双引号的。
name: bianchengbang若字符串使用单引号则会转义特殊字符。
name: zhangsan \n lisi输出结果为
zhangsan \n lisi若字符串使用双引号则不会转义特殊字符特殊字符会输出为其本身想表达的含义
name: zhangsan \n lisi输出结果为
zhangsan
lisi2.2.2 数组一组按次序排列的值
YAML 使用“-”表示数组中的元素特别注意“-”后面一定要跟着一个空格普通写法如下: pets:- dog- cat- pig行内写法
pets: [dog,cat,pig]2.2.3 对象键值对的集合
在 YAML 中对象可能包含多个属性每一个属性都是一对键值对。
YAML 为对象提供了 2 种写法
普通写法使用缩进表示对象与属性的层级关系。
website: name: bianchengbangurl: www.biancheng.net行内写法
website: {name: bianchengbang,url: www.biancheng.net}2.2.4 复合结构 person:name: zhangsanage: 30pets: # 数组- dog- cat- pigcar: # car对象name: QQchild: # child对象name: zhangxiaosanage: 22.3 ymal组织结构
一个 YAML 文件可以由一个或多个文档组成文档之间使用“---”作为分隔符且个文档相互独立互不干扰。如果 YAML 文件只包含一个文档则“---”分隔符可以省略。 ---website:name: bianchengbangurl: www.biancheng.net---website: {name: bianchengbang,url: www.biancheng.net}pets:-dog-cat-pig---pets: [dog,cat,pig]name: zhangsan \n lisi---name: zhangsan \n lisi3. yaml配置文件数据读取
环境准备
3.1 使用功能Value注解
使用 Value(表达式) 注解可以从配置文件中读取数据注解中用于读取属性名引用方式是${一级属性名.二级属性名……}
可以在 BookController 中使用 Value 注解读取配合文件数据如下
RestController
RequestMapping(/books)
public class BookController {// 读取yaml中的内容方式一Value(${lesson})private String lesson;Value(${enterprise.name})private String name;Value(${enterprise.age})private String age;Value(${enterprise.tel})private String tel;Value(${enterprise.subject[0]})private String subject_0;GetMapping(/{id})public String getById(PathVariable Integer id){System.out.println( 方式一 );System.out.println(id id);System.out.println(lesson lesson);System.out.println(name name);System.out.println(age age);System.out.println(tel tel);System.out.println(subject[0] subject_0);return hello springboot3;}
}3.2 Enviroment对象
使用Environment对象SpringBoot 会将配置文件中所有的数据封装到 Environment 对象中。如果需要使用哪个数据只需要通过调用 Environment 对象的 getProperty(String name) 方法获取。
RestController
RequestMapping(/books)
public class BookController {// 使用 Environment 对象的方式读取数据。// SpringBoot 会将yaml配置文件中所有的数据封装到 Environment 对象中// 如果需要使用哪个数据只需要通过调用 Environment 对象的 getProperty(String name) 方法获取。Autowiredprivate Environment environment;GetMapping(/{id})public String getById(PathVariable Integer id){System.out.println( 方式二 );System.out.println(lesson environment.getProperty(lesson));System.out.println(name environment.getProperty(enterprise.name));System.out.println(age environment.getProperty(enterprise.age));System.out.println(tel environment.getProperty(enterprise.tel));System.out.println(subject_0 environment.getProperty(enterprise.subject[2]));return hello springboot3;}
}3.3 自定义对象
SpringBoot 提供了将配置文件中的数据封装到自己定义的实体类对象中的方式。具体操作如下 将实体类 bean 的创建交给 Spring 管理。 在类上添加 Component 注解 使用 ConfigurationProperties 注解表示加载配置文件在该注解中也可以使用 prefix 属性指定只加载指定前缀的数据 在 BookController 中进行注入
Component
ConfigurationProperties(prefix enterprise)
public class Enterprise {private String name;private String tel;private Integer age;private String[] subject;
// get/set方法构造方法toString方法。。。。BookController的内容
RestController
RequestMapping(/books)
public class BookController {// 创建enterprise对应的实体类将配置文件中的数据封装到我们自定义的实体类对象中的方式,方式三Autowiredprivate Enterprise enterprise;GetMapping(/{id})public String getById(PathVariable Integer id){System.out.println( 方式三 );System.out.println(name enterprise.getName());System.out.println(age enterprise.getAge());System.out.println(tel enterprise.getTel());System.out.println(subject enterprise.getSubject()[1]);return hello springboot3;}
}4. 多环境配置
目前我们都是在自己的电脑上进行开发但是开发完之后还要交给测试环境和生成环境。这些配置肯定都不相同比如我们开发阶段会在自己的电脑上安装 mysql 连接自己电脑上的 mysql 即可但是项目开发完毕后要上线就需要修改配置将环境的配置改为线上环境的。 来回的修改配置会很麻烦对于这个问题 SpringBoot 给开发者提供了多环境的快捷配置需要切换环境时只需要改一个配置即可。不同类型的配置文件多环境开发的配置都不相同。
4.1 yml/yaml文件进行多环境配置
在yml/yaml中进行配置
# 设置启用的环境
spring:profiles:active: dev # 表示使用的是开发环境的配置# 使用 “---” 区分不同的配置
---
# 开发环境
server:port: 8080
spring:profiles: dev
---
# 生产环境
server:port: 8181
spring:profiles: pro
---
# 测试环境
server:port: 8082
spring:profiles: test注意
在上面配置中给不同配置起名字的 spring.profiles 配置项已经过时。最新用来起名字的配置项是
#开发
spring:config:activate:on-profile: dev测试开发环境 测试生产环境 测试测试环境 4.2 properties文件进行多环境配置
properties 类型的配置文件配置多环境需要定义不同的配置文件 application-dev.properties 是开发环境的配置文件。我们在该文件中配置端口号为 80 server.port8080application-test.properties 是测试环境的配置文件。我们在该文件中配置端口号为 81 server.port8081application-pro.properties 是生产环境的配置文件。我们在该文件中配置端口号为 82 server.port8082SpringBoot 只会默认加载名为 application.properties 的配置文件所以需要在 application.properties 配置文件中设置启用哪个配置文件配置如下:
spring.profiles.activedev # 启用开发环境
# spring.profiles.activepro # 启用生产环境
# spring.profiles.activetest # 启用测试环境4.3 命令行启动参数设置
使用 SpringBoot 开发的程序都是打成 jar 包通过 java -jar xxx.jar 的方式启动服务的。那么问题来了如何切换环境呢因为配置文件打到的jar包中了。
我们知道 jar 包其实就是一个压缩包可以解压缩然后修改配置最后再打成jar包就可以了。这种方式显然有点麻烦而 SpringBoot 提供了在运行 jar 时设置开启指定的环境的方式如下
java –jar xxx.jar –-spring.profiles.activetest那么这种方式能不能临时修改端口号呢也是可以的可以通过如下方式
java –jar xxx.jar –-server.port88当然也可以同时设置多个配置比如即指定启用哪个环境配置又临时指定端口如下
java –jar springboot.jar –-server.port88 –-spring.profiles.activetest原始配置开发环境dev、测试端口8080 利用--server.port指令修改端口为8089 利用--spring.profiles.active指令切换配置环境 将--server.port 和 --spring.profiles.active 结合使用 大家进行测试后就会发现命令行设置的端口号优先级高也就是使用的是命令行设置的端口号配置的优先级其实 SpringBoot 官网已经进行了说明参见 :https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config
5. 配置文件分类
问题提出有这样的场景我们开发完毕后需要交给测试人员进行测试由于测试环境和开发环境的很多配置都不相同所以测试人员在运行我们的工程时需要临时修改很多配置如下
java –jar springboot.jar –-spring.profiles.activetest --server.port85 --server.servlet.context-path/heima --server.tomcat.connection-timeout-1 …… …… …… …… ……针对这种情况SpringBoot 定义了配置文件不同的放置的位置而放在不同位置的优先级时不同的。
SpringBoot 中4级配置文件放置位置
1级classpathapplication.yml2级classpathconfig/application.yml3级file application.yml4级file config/application.yml 说明 级别越高优先级越高 SpringBoot项目中的配置文件是分级的可以分为1,2,3,4级 第1级就是resources下面的配置文件 application.yml
第2级是在resources/config目录下的配置文件application.yml 启动项目发现用的端口号为8081说明此配置文件的优先级较高。 第3级是SpringBoot项目package后在目录下面创建的application.yml配置文件 在Dos窗口中启动项目发现项目端口号为8082说明此配置文件的优先级要高于前两个配置文件的优先级。 第4级是SpringBoot项目package后在目录下面创建的config/application.yml配置文件 在Dos窗口中启动项目发现项目端口号为8083说明此配置文件的优先级要高于前三个配置文件的优先级。