咱们知道java 由于历史的缘由,一直有一个配置地狱的痛点。那么如何解决掉它呢?
spring boot 是一柄利器,可是呢,仍是要配置。
看来配置的避免不了的了。
那么如何能够减轻这种痛苦呢?
yaml 就是一个减轻的利器。java
yaml 是什么呢? yaml ain't markup languagespring
这是什么意思呢?解释的不是一门标记语言。可是不管它怎么说,他的确是做为标记语言存在的。api
那么这个yaml配置放在哪里里?数组
放在这下面哈。app
先来熟悉一下yaml语法吧,这里只是作一些我本身经验。
下面是菜鸟的,我认为起码应该熟悉这个。ide
基本语法 大小写敏感 使用缩进表示层级关系 缩进不容许使用tab,只容许空格 缩进的空格数不重要,只要相同层级的元素左对齐便可 '#'表示注释 数据类型 YAML 支持如下几种数据类型: 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary) 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list) 纯量(scalars):单个的、不可再分的值
1.key:valuespring-boot
string 类型默认不用加"" 或者 ''
这种类型的话:"" 会转义,'' 不会转义。测试
friend: lastname: bob firstname: z
若是是简单的对象建议这样写:friend:{ lastname:bob,firstname:z}
2.这里介绍一下数组,支持两种写法:this
sex - boy - girl
若是是简单的数组。那么我建议这样写: sex:[boy,girl]scala
yaml 除了这样写能让spring boot读取到,这是系统自动会去读取server。
那么咱们本身定义的配置该如何读取?
person 类
package com.axm.demo.bean; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; /** * @ConfigurationProperties */ @Component @ConfigurationProperties(prefix ="person") public class Person { private String lastName; private Integer age; private boolean boss; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog; public String getLastName() { return lastName; } @Override public String toString() { return "Person{" + "lastName='" + lastName + '\'' + ", age=" + age + ", boss=" + boss + ", birth=" + birth + ", maps=" + maps + ", lists=" + lists + ", dog=" + dog + '}'; } public void setLastName(String lastName) { this.lastName = lastName; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public boolean isBoss() { return boss; } public void setBoss(boolean boss) { this.boss = boss; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } public Map<String, Object> getMaps() { return maps; } public void setMaps(Map<String, Object> maps) { this.maps = maps; } public List<Object> getLists() { return lists; } public void setLists(List<Object> lists) { this.lists = lists; } public Dog getDog() { return dog; } public void setDog(Dog dog) { this.dog = dog; } }
dog 类
package com.axm.demo.bean; public class Dog { private String name; private Integer ages; @Override public String toString() { return "Dog{" + "name='" + name + '\'' + ", ages=" + ages + '}'; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAges() { return ages; } public void setAges(Integer ages) { this.ages = ages; } }
那么在yml中这样写:
person: lastName: zhangsan age: 18 boss: false birth: 2017/12/12 maps: {k1: v1,k2: 12} lists: - lisi - zhaolu dog: name: 小狗
这里须要配置的是person中增长注解:
@Component @ConfigurationProperties(prefix ="person")
pom.xml 中增长:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
测试其是否配置成功:
package com.axm.demo; import com.axm.demo.bean.Person; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest class DemoApplicationTests { @Autowired Person person; @Test void contextLoads() { System.out.println(person); } }