|
SpringBoot基础系列文章SpringBoot基础(一):快速入门SpringBoot基础(二):配置文件详解目录一、配置文件分类二、配置文件优先级1、不同版本优先级2、不同位置优先级三、配置文件格式1、yml和yaml格式1.1、字符串1.2、布尔类型1.3、整数型1.4、浮点型1.5、空(Null)1.6、时间类型1.7、对象(属性和值)、Map(键值对)1.8、数组、list、set1.9、对象数组、对象list、对象set2、properties格式四、临时属性设置1、临时属性2、自定义配置文件五、配置文件数据读取1、读取单一数据2、读取全部数据3、读取对象数据4、配置文件内的数据引用六、多环境开发1、yml单一文件版2、yml多文件版3、yml独立配置多文件版一、配置文件分类SpringBoot提供了3种配置文件的格式application.properties(传统格式/默认格式)server.port=811application.yml(主流格式)server:port:8212application.yamlserver:port:8312yml格式和yaml格式除了文件名后缀不一样,格式完全一样二、配置文件优先级1、不同版本优先级springboot2.4.0及以后版本:application.yaml➡️application.yml➡️application.propertiesspringboot2.4.0以前版本:application.properties➡️application.yml➡️application.yaml旧版application.properties优先级最高,新版优先级最低不同配置文件中相同配置高优先级覆盖低优先级,不同配置文件中不同配置全部保留2、不同位置优先级classpath:application.yml(resources目录)【最低-程序员】classpath:config/application.yml(resources目录下的config目录)【项目经理】file:application.yml(jar包所在目录)【运维】file:config/application.yml(jar包所在目录下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你好"}1234567891011121.2、布尔类型true、yes、on皆为真,不区分每个字母大小写false、no、off皆为假,不区分每个字母大小写flag1:trueflag2:Falseflag3:yesflag4:NO#转为json样式如下{"flag1":true,"flag2":false,"flag3":true,"flag4":false}123456如果出现大写字母会提示异常,不过不影响1.3、整数型支持二进制、八进制、十六进制num1:666num2:0001_0000#支持二进制、八进制、十六进制#转为json样式如下{"num1":666,"num2":4096}123451.4、浮点型支持科学计数法f1:1.1f2:1.1e-2#使用科学计数法#转为json样式如下{"f1":1.1,"f2":0.011}123451.5、空(Null)null、Null和~都是空,不指定值默认也是空str6:nullstr7:Nullstr8:~str9:#转为json样式如下{"str6":"","str7":"","str8":"","str9":""}12345671.6、时间类型java.util.Date类型#date1:2020-05-26这样写会抛异常date1:2020/05/26date2:2020/05/2601:00:00#转为json样式如下{"date1":1590422400000,"date3":1590426000000}1234561.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":"张三"}1234567891011121.8、数组、list、setperson:#数组格式一subject:-Java-前端-大数据#数组格式二likes:[王者荣耀,刺激战场]#转为json样式如下{"likes":["王者荣耀","刺激战场"],"subject":["Java","前端","大数据"]}1234567891011121.9、对象数组、对象list、对象setperson:#对象数组格式一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"}]}12345678910111213141516171819202122232、properties格式person.name=李四person.age=18person.flag1=falseperson.date1=2019/01/01#map格式一person.map1.key1=value1person.map1.key2=value2#map格式二person.map2[k1]=v1person.map2[k2]=v2#数组格式一person.subject[0]=javaperson.subject[1]=pythonperson.subject[2]=c++#数组格式二person.likes=唱,跳,rap#数组对象格式person.pet1[0].type=catperson.pet1[0].age=1person.pet1[1].type=dogperson.pet1[1].age=2#转为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++"]}12345678910111213141516171819202122232425262728293031323334353637383940四、临时属性设置1、临时属性临时属性添加方式:java-jar工程名.jar--属性名=值多个临时属性之间使用空格分隔java–jarspringboot.jar--server.port=80--logging.level.root=debug1临时属性的加载优先级要高于配置文件的idea中Programarguments(程序参数)或VMoptions(虚拟机参数)就是添加临时属性的虚拟机参数一般用来设置系统属性(不常用)程序参数一般用来设置应用程序选项或参数(常用)–server.port选项应该在java-jar命令之后使用,而-Dserver.port选项应该在-jar命令前使用#以应用参数的方式java-jarmy.jar--server.port=7788#或以JDK参数的方式java-Dserver.port=7788-jarmy.jar123452、自定义配置文件方式一:使用临时属性设置配置文件名,注意仅仅是名称,不要带扩展名--spring.config.name=myApplication1方式二:使用临时属性设置配置文件路径或类路径,全路径名--spring.config.location=classpath:/myApplication.yml1五、配置文件数据读取1、读取单一数据使用@Value可以读取单个数据,属性名引用方式:${一级属性名.二级属性名……}@RestControllerpublicclassReadConfigFile{@Value("${server.port}")privateStringmyPort;@RequestMapping("/getValue")publicStringgetValue(){System.out.println(myPort);//8080return"success";}}1234567891011122、读取全部数据SpringBoot提供了一个对象,能够把所有的数据都封装到这一个对象中,这个对象叫做Environment,使用getProperty方法获取@RestControllerpublicclassHelloController{@AutowiredprivateEnvironmentenvironment;@GetMapping("/hello")publicStringhello(){StringpersonName=environment.getProperty("person.name");StringpetType=environment.getProperty("person.pet1[0].type");return"Hello,SpringBoot!";}}123456789101112133、读取对象数据使用@ConfigurationProperties注解绑定配置信息到封装类中封装类需要定义为Spring管理的bean,否则无法进行属性注入yml配置文件person:name:zhang3age:30pets:-type:dogage:1-type:catage:2map:k1:v1k2:v21234567891011属性注入的实体,使用时候直接@Autowired注入即可@Data@Component@ConfigurationProperties(prefix="person")publicclassPerson{privateStringname;privateIntegerage;privateList
pets;privateMapmap;}@DataclassPets{privateStringtype;privateIntegerage;}123456789101112131415添加如下依赖,yml属性可以提示@ConfigurationProperties对应的实体的字段属性org.springframework.boottrue123454、配置文件内的数据引用如文件属性内都具有相同的前缀center:dataDir:/usr/local/fire/datatmpDir:/usr/local/fire/tmplogDir:/usr/local/fire/logmsgDir:/usr/local/fire/msgDir12345可以使用引用格式来定义数据,其实就是搞了个变量名,然后引用变量baseDir:/usr/local/firecenter:dataDir{baseDir}/datatmpDir{baseDir}/tmplogDir{baseDir}/logmsgDir{baseDir}/msgDir123456六、多环境开发1、yml单一文件版springboot2.4.0以前版本spring:profiles:active:dev#激活dev环境配置---spring:profiles:proserver:port:80---spring:profiles:devserver:port:81---spring:profiles:testserver:port:82123456789101112131415161718springboot2.4.0及以后的版本spring.profiles为过时属性配置,不过也能使用替换属性为spring.config.activate.on-profilespring:profiles:active:dev #激活dev环境配置---spring:config:activaten-profile:proserver:port:80---spring:config:activaten-profile:devserver:port:81---spring:config:activaten-profile:testserver:port:821234567891011121314151617181920212223242、yml多文件版application.yml主配置文件spring:profiles:active:pro #激活pro环境#其他公共属性...12345application-pro.yml生产环境配置文件server:port:8112application-dev.yml开发环境配置文件server:port:8212文件的命名规则为:application-环境名.yml主配置文件中设置公共配置(全局)环境分类配置文件中常用于设置冲突属性(局部)主配置文件属性和环境分类配置文件属性冲突,后者优先级高3、yml独立配置多文件版将所有的配置根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下application-devDB.ymlapplication-devRedis.ymlapplication-devMVC.ymlSpringBoot2.4.0以前版本使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔spring:profiles:active:devinclude:devDB,devRedis,devMVC1234相当于加载dev配置时,再加载对应的3组配置主环境最后加载当主环境dev与其他环境有相同属性时,主环境属性生效其他环境中有相同属性时,最后加载的环境属性生效如下展示加载顺序,最后加载的优先级最高(因为覆盖了相同的属性)SpringBoot2.4.0及以后版本比如我要切换dev环境为pro时,include也要修改。因为include属性只能使用一次SpringBoot从2.4版开始使用group属性替代include属性,降低了配置书写量spring:profiles:active:devgroup:"dev":devDB,devRedis,devMVC"pro":proDB,proRedis,proMVC"test":testDB,testRedis,testMVC1234567主环境最先加载环境中有相同属性时,最后加载的环境属性生效如下展示加载顺序,dev在第一位,相同属性会被覆盖总之:配置文件后加载的会覆盖先加载的配置文件属性内容
|
|