application.properties 和 application.yml
4. properties配置⽂件说明properties配置⽂件是最早期的配置⽂件格式也是创建SpringBoot项⽬默认的配置⽂件4.1 properties基本语法properties是以键值的形式配置的key和value之间是以连接的如# 配置项⽬端⼝号 server.port8080 #配置数据库连接信息 spring.datasource.urljdbc:mysql://127.0.0.1:3306/testdb? characterEncodingutf8useSSLfalse spring.datasource.usernameroot spring.datasource.passwordrootPS⼩技巧配置⽂件中使⽤“#”来添加注释信息。更多配置信息随着课堂练习再学习.感兴趣的也可以参考官⽹:Spring Boot配置。4.2 读取配置⽂件如果在项⽬中想要主动的读取配置⽂件中的内容可以使⽤Value 注解来实现。Value注解使⽤ ${} 的格式读取如下代码所⽰properties配置如下:mykey.key1 bite import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; RestController public class PropertiesController { Value(${mykey.key1}) private String key1; RequestMapping(/key) public String key(){ return 读取到值:key1; } }最终执⾏效果4.3 properties 缺点分析properties配置是以key-value的形式配置的如下图所⽰从上述配置key看出properties配置⽂件中会有很多的冗余的信息⽐如这些想要解决这个问题就可以使⽤yml配置⽂件的格式化了.5. yml 配置⽂件说明yml是YAML是缩写它的全称YetAnotherMarkupLanguage翻译成中⽂就是“另⼀种标记语⾔. 我们先来学习yml的语法5.1 yml 基本语法yml是树形结构的配置⽂件它的基础语法是key:value.key和value之间使⽤英⽂冒号加空格的⽅式组成空格不可省略基础语法如下第⼀项的配置为正确的key也是⾼亮显⽰的.第⼆项没有空格是错误的使⽤⽅式第⼆项的key也 没有⾼亮显⽰使⽤ yml 连接数据库yml使⽤⽰例spring: datasource: url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncodingutf8useSSLfalse username: root password: root5.2 yml 使⽤进阶5.2.1 yml 配置不同数据类型及 null# 字符串 string.value: Hello # 布尔值true或false boolean.value: true boolean.value1: false # 整数 int.value: 10 # 浮点数 float.value: 3.14159 # Null~代表null null.value: ~ # 空字符串 #, 直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表⽰是使⽤引号括起来 empty.value: 5.2.1.1 yml 配置读取yml读取配置的⽅式和properties相同使⽤Value注解即可实现代码如下yml配置:string: hello: bite RestController public class ReadYml { Value(${string.hello}) private String hello; RequestMapping(/ymlKey) public String key(){ return 读取到值:hello; } }访问:http://127.0.0.1:8080/ymlKey运⾏结果:5.2.1.2 注意事项value值加单双引号字符串默认不⽤加上单引号或者双引号如果加英⽂的单双引号可以表⽰特殊的含义。 尝试在application.yml中配置如下信息string: str1: Hello \n Spring Boot. str2: Hello \n Spring Boot. str3: Hello \n Spring Boot.读取程序实现代码如下RestController public class ReadYml { Value(${string.str1}) private String str1; Value(${string.str2}) private String str2; Value(${string.str3}) private String str3; RequestMapping(/yml) public String readYml(){ System.out.println(str1); System.out.println(str2); System.out.println(str3); return yml; } }以上程序的执⾏结果如下图所⽰从上述结果可以看出• 字符串默认不⽤加上单引号或者双引号。• 单引号会转义特殊字符使其失去特殊功能,始终是⼀个普通的字符串.• 双引号不会转义字符串⾥⾯的特殊字符,特殊字符会表⽰本⾝的含义.此处的转义理解起来会有些拗⼝,\n本意表⽰的是换⾏使⽤单引号会转义,就是说,\n不再表⽰换⾏了,⽽是表⽰⼀个普通的字符串使⽤双引号不会转义,表⽰\n表⽰的是它本⾝的含义,就是换⾏JavaEE的学习重在理解和使⽤,不纠结概念和描述5.2.2 配置对象我们还可以在yml中配置对象如下配置student: id: 1 name: Java age: 18或者是使⽤⾏内写法与上⾯的写法作⽤⼀致student: {id: 1,name: Java,age: 18}这个时候就不能⽤Value来读取配置中的对象了此时要使⽤另⼀个注解 ConfigurationProperties 来读取具体实现如下import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; ConfigurationProperties(prefix student) Component Data public class Student { private int id; private String name; private int age; }调⽤类的实现如下RestController public class StudentController { Autowired private Student student; RequestMapping(/readStudent) public String readStudent(){ return student.toString(); } }访问http://127.0.0.1:8080/readStudent 运⾏结果如下:5.2.3 配置集合配置⽂件也可以配置list集合如下所⽰dbtypes: name: - mysql - sqlserver - db2集合的读取和对象⼀样也是使⽤ConfigurationProperties 来读取的具体实现如下Component ConfigurationProperties(dbtypes) Data public class ListConfig { private ListString name; }访问集合的实现如下RestController public class ReadYml2 { Autowired private ListConfig listConfig; RequestMapping(/readList) public String readList(){ return listConfig.toString(); } }5.2.4 配置Map配置⽂件也可以配置map如下所⽰maptypes: map: k1: kk1 k2: kk2 k3: kk3或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致):maptypes: {map: {k1: kk1,k2: kk2, k3: kk3}}Map的读取和对象⼀样也是使⽤ConfigurationProperties 来读取的具体实现如下Component ConfigurationProperties(maptypes) Data public class MapConfig { private HashMapString,String map; }打印类的实现如下RestController public class ReadYml2 { Autowired private MapConfig mapConfig; RequestMapping(/readMap) public String readStudent(){ return mapConfig.toString(); } }5.3 yml优缺点优点:1. 可读性⾼写法简单,易于理解2. ⽀持更多的数据类型,可以简单表达对象,数组,ListMap等数据形态.3. ⽀持更多的编程语⾔,不⽌是Java中可以使⽤,在Golang,Python,Ruby,JavaScript中也可以使⽤缺点:1. 不适合写复杂的配置⽂件⽐如properties格式如下keycloak.realm demo keycloak.resource fm-cache-cloud keycloak.credentials.secret d4589683-Oce7-4982-bcd3 keycloak.security[0].authRoles[0] user keycloak.security[0].collections[0].name ssologinurl keycloak.security[0].collections[0].patterns[0] /login/*转换为ymlkeycloak: realm: demo resource: fm-cache-cloud credentials: secret: d4589683-Oce7-4982-bcd3 security: - authRoles: - user collections: - name: ssologinurl patterns: - /login/*转换的过程也⽐较花费精⼒,如果配置更复杂⼀点,可读性会更差,代码也会更难写2. 对格式有较强的要求(⼀个空格可能会引起⼀场⾎案)