网站集约化建设推进情况,福建网站开发有限开发公司,南京门户网站,网站免费下载appSpringBoot基础系列文章
SpringBoot基础(一)#xff1a;快速入门
SpringBoot基础(二)#xff1a;配置文件详解 目录 一、配置文件分类二、配置文件优先级1、不同版本优先级2、不同位置优先级 三、配置文件格式1、yml和yaml格式1.1、字符串1.2、布尔类型1.3、整数型1.4、浮点…SpringBoot基础系列文章
SpringBoot基础(一)快速入门
SpringBoot基础(二)配置文件详解 目录 一、配置文件分类二、配置文件优先级1、不同版本优先级2、不同位置优先级 三、配置文件格式1、yml和yaml格式1.1、字符串1.2、布尔类型1.3、整数型1.4、浮点型1.5、空Null1.6、时间类型1.7、对象(属性和值)、Map(键值对)1.8、数组、list、set1.9、对象数组、对象list、对象set 2、properties格式 四、临时属性设置1、临时属性2、自定义配置文件 五、配置文件数据读取1、读取单一数据2、读取全部数据3、读取对象数据4、配置文件内的数据引用 六、多环境开发1、yml单一文件版2、yml多文件版3、yml独立配置多文件版 一、配置文件分类 SpringBoot提供了3种配置文件的格式 application.properties传统格式/默认格式
server.port81application.yml主流格式
server:port: 82application.yaml
server:port: 83yml格式和yaml格式除了文件名后缀不一样格式完全一样
二、配置文件优先级
1、不同版本优先级
springboot 2.4.0及以后版本application.yaml ➡️ application.yml ➡️ application.propertiesspringboot 2.4.0以前版本application.properties ➡️ application.yml ➡️ application.yaml旧版application.properties优先级最高新版优先级最低不同配置文件中相同配置高优先级覆盖低优先级不同配置文件中不同配置全部保留
2、不同位置优先级
classpathapplication.ymlresources目录【最低-程序员】classpathconfig/application.ymlresources目录下的config目录【项目经理】file application.ymljar包所在目录【运维】file config/application.ymljar包所在目录下config目录【最高-运维经理】
三、配置文件格式
1、yml和yaml格式
大小写敏感使用缩进表示层级关系只允许使用空格不允许使用Tab键 缩进的空格数量不重要只要相同层级的元素左侧对齐即可属性名与属性值之间使用冒号空格作为分隔 #号 表示注释可使用-代替驼峰如Java中的lastName在yml中lastName或last-name都可正确映射
1.1、字符串
字符串可不用加单引号或双引号单引号不会转义【\n 则为普通字符串显示】双引号会转义【\n会显示为换行符】字符串可以拆成多行换行符会被转化成一个空格|开头大文本写在下层保留文本格式换行符正确显示
str1: 哈喽
str2: 哈喽 你好呀
str3: 哈喽 \n 你好
str4: 哈喽 \n 你好
str5: |哈喽你好# 转为json样式如下
{str1:哈喽,str2:哈喽 你好 呀,str3:哈喽 \\n 你好,str4:哈喽 \n 你好,str5:哈喽\n 你好}1.2、布尔类型
true、yes、on皆为真不区分每个字母大小写false、no、off皆为假不区分每个字母大小写
flag1: true
flag2: False
flag3: yes
flag4: NO
# 转为json样式如下
{flag1:true,flag2:false,flag3:true,flag4:false}如果出现大写字母会提示异常不过不影响 1.3、整数型
支持二进制、八进制、十六进制
num1: 666
num2: 0001_0000 # 支持二进制、八进制、十六进制# 转为json样式如下
{num1:666,num2:4096}1.4、浮点型
支持科学计数法
f1: 1.1
f2: 1.1e-2 # 使用科学计数法# 转为json样式如下
{f1:1.1,f2:0.011}1.5、空Null
null、Null和~都是空不指定值默认也是空
str6: null
str7: Null
str8: ~
str9:# 转为json样式如下
{str6:,str7:,str8:,str9:}1.6、时间类型
java.util.Date类型
# date1: 2020-05-26 这样写会抛异常
date1: 2020/05/26
date2: 2020/05/26 01:00:00# 转为json样式如下
{date1:1590422400000,date3:1590426000000}1.7、对象(属性和值)、Map(键值对)
java对象对应的yml设置属性 person:name: 张三age: 30# Map格式方式一map1:k1: v1k2: v2# Map格式方式二map2: { key1: value1, key2: value2 }# 转为json样式如下
{age:30,map1:{k1:v1,k2:v2},map2:{key1:value1,key2:value2},name:张三}1.8、数组、list、set person:#数组格式一subject:- Java- 前端- 大数据#数组格式二likes: [王者荣耀,刺激战场]# 转为json样式如下
{likes:[王者荣耀,刺激战场],subject:[Java,前端,大数据]}1.9、对象数组、对象list、对象set person:# 对象数组格式一pet1:- type: dogage: 1- type: catage: 2# 对象数组格式一pet2:- type: dogage: 1-type: catage: 2# 对象数组格式一pet3: [{type: dog, age: 1}, {type: cat, age: 2}]# 转为json样式如下
{pet1:[{age:1,type:dog},{age:2,type:cat}],pet2:[{age:1,type:dog},{age:2,type:cat}],pet3:[{age:1,type:dog},{age:2,type:cat}]
}2、properties格式 person.name李四
person.age18
person.flag1false
person.date12019/01/01# map格式一
person.map1.key1value1
person.map1.key2value2
# map格式二
person.map2[k1]v1
person.map2[k2]v2# 数组格式一
person.subject[0]java
person.subject[1]python
person.subject[2]c
# 数组格式二
person.likes唱,跳,rap# 数组对象格式
person.pet1[0].typecat
person.pet1[0].age1
person.pet1[1].typedog
person.pet1[1].age2# 转为json样式如下
{age:18,date1:1546272000000,flag1:false,likes:[唱,跳,rap],map1:{key1:value1,key2:value2},map2:{k1:v1,k2:v2},name:李四,pet1:[{age:1,type:cat},{age:2,type:dog}],subject:[java,python,c]
}四、临时属性设置
1、临时属性
临时属性添加方式java -jar 工程名.jar --属性名值多个临时属性之间使用空格分隔
java –jar springboot.jar --server.port80 --logging.level.rootdebug临时属性的加载优先级要高于配置文件的idea中Program arguments程序参数或VM options 虚拟机参数就是添加临时属性的 虚拟机参数一般用来设置系统属性不常用程序参数一般用来设置应用程序选项或参数常用–server.port 选项应该在 java -jar 命令之后使用而 -Dserver.port 选项应该在 -jar 命令前使用
# 以应用参数的方式
java -jar my.jar --server.port7788# 或以 JDK 参数的方式
java -Dserver.port7788 -jar my.jar2、自定义配置文件
方式一使用临时属性设置配置文件名注意仅仅是名称不要带扩展名
--spring.config.namemyApplication方式二使用临时属性设置配置文件路径或类路径全路径名
--spring.config.locationclasspath:/myApplication.yml五、配置文件数据读取
1、读取单一数据
使用Value可以读取单个数据属性名引用方式${一级属性名.二级属性名……}
RestController
public class ReadConfigFile {Value(${server.port})private String myPort;RequestMapping(/getValue)public String getValue(){System.out.println(myPort);//8080return success;}
}2、读取全部数据
SpringBoot提供了一个对象能够把所有的数据都封装到这一个对象中这个对象叫做Environment使用getProperty方法获取
RestController
public class HelloController {Autowiredprivate Environment environment;GetMapping(/hello)public String hello(){String personName environment.getProperty(person.name);String petType environment.getProperty(person.pet1[0].type);return Hello,Spring Boot !;}
}3、读取对象数据
使用ConfigurationProperties注解绑定配置信息到封装类中封装类需要定义为Spring管理的bean否则无法进行属性注入
yml配置文件
person:name: zhang3age: 30pets:- type: dogage: 1- type: catage: 2map:k1: v1k2: v2属性注入的实体使用时候直接Autowired注入即可
Data
Component
ConfigurationProperties(prefix person)
public class Person {private String name;private Integer age;private ListPets pets;private MapString,String map;
}Data
class Pets {private String type;private Integer age;
}添加如下依赖yml属性可以提示ConfigurationProperties对应的实体的字段属性
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactIdoptionaltrue/optional
/dependency4、配置文件内的数据引用
如文件属性内都具有相同的前缀
center:dataDir: /usr/local/fire/datatmpDir: /usr/local/fire/tmplogDir: /usr/local/fire/logmsgDir: /usr/local/fire/msgDir可以使用引用格式来定义数据其实就是搞了个变量名然后引用变量
baseDir: /usr/local/fire
center:dataDir: ${baseDir}/datatmpDir: ${baseDir}/tmplogDir: ${baseDir}/logmsgDir: ${baseDir}/msgDir六、多环境开发
1、yml单一文件版 springboot 2.4.0以前版本 spring:profiles:active: dev #激活dev环境配置
---
spring:profiles: pro
server:port: 80
---
spring:profiles: dev
server:port: 81
---
spring:profiles: test
server:port: 82springboot 2.4.0及以后的版本 spring.profiles为过时属性配置不过也能使用替换属性为spring.config.activate.on-profile
spring:profiles:active: dev #激活dev环境配置
---
spring:config:activate:on-profile: pro
server:port: 80
---
spring:config:activate:on-profile: dev
server:port: 81
---
spring:config:activate:on-profile: test
server:port: 822、yml多文件版
application.yml主配置文件
spring:profiles:active: pro #激活pro环境
#其他公共属性
...application-pro.yml生产环境配置文件
server:port: 81application-dev.yml开发环境配置文件
server:port: 82文件的命名规则为application-环境名.yml主配置文件中设置公共配置全局环境分类配置文件中常用于设置冲突属性局部主配置文件属性和环境分类配置文件属性冲突后者优先级高
3、yml独立配置多文件版
将所有的配置根据功能对配置文件中的信息进行拆分并制作成独立的配置文件命名规则如下 application-devDB.ymlapplication-devRedis.ymlapplication-devMVC.yml SpringBoot2.4.0以前版本 使用include属性在激活指定环境的情况下同时对多个环境进行加载使其生效多个环境间使用逗号分隔
spring:profiles:active: devinclude: devDB,devRedis,devMVC相当于加载dev配置时再加载对应的3组配置主环境最后加载 当主环境dev与其他环境有相同属性时主环境属性生效其他环境中有相同属性时最后加载的环境属性生效 如下展示加载顺序最后加载的优先级最高因为覆盖了相同的属性 SpringBoot2.4.0及以后版本 比如我要切换dev环境为pro时include也要修改。因为include属性只能使用一次SpringBoot从2.4版开始使用group属性替代include属性降低了配置书写量
spring:profiles:active: devgroup:dev: devDB,devRedis,devMVCpro: proDB,proRedis,proMVCtest: testDB,testRedis,testMVC主环境最先加载 环境中有相同属性时最后加载的环境属性生效 如下展示加载顺序dev在第一位相同属性会被覆盖 总之配置文件后加载的会覆盖先加载的配置文件属性内容