springboot使用Application.properties
和Application.yml
这两个作为全局配置文件,properties是一种常见的配置文件的形式
配置文件的作用就是来配置某些信息,修改某些默认值,在我们快速创建的springboot项目中就是Application.properties
这里引入一种新的配置文件的形式就是yaml配置文件,后缀名为yml
它以数据为中心,比json和xml更高效
比如我们要配置服务器端口号
properties要这样server.port=8888
xml要这样
<server>
<port>8888<port>
</server>
而yml要这样,而不是把大量时间放在标签的开闭上边,以数据为中心
server:
port: 8888
yml基本语法
key:(空格)value
这种形式,其中value前边的空格是要有的,这是规定
如果有包含关系,比如port在server里边,那么就用空格来表示缩进,具体缩进多少无所谓,其实只要对其就好,有点类似于Python的语法格式
它的属性也是大小写敏感的
yml值的写法
1.对于字面量的写法,比如数字,字符串,布尔类型,直接用key: value的写法就行,而且字符串默认不用加引号,
在此,单引号和双引号的含义也不太一样
单引号: 显示原生的字符串,比如'hello \n world'
那么他表示的就是Hello \n world
这个字符串
双引号: 可以包含特殊字符,比如"hello \n world"
打印出来就是hello (回车) world
2.对于对象或者map类型来说,我们可以吧对象写到下一行,如下
cat:
legs: 4
tails: 1
eyes: 2
也可以这么写
cat: {legs: 4, tails: 1, eyes: 2}
3.对于数组的写法,如下
第一种写法,用短横线
animal:
- cat
- dog
- pig
- fox
或者这样
animal: [cat, dog, pig, fox]
我们新建一个工程,然后创建2个bean对象Dog.java
和Person.java
Dog.java
package com.zhanshen.domain;
public class Dog {
private Integer age;
private Integer legs;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getLegs() {
return legs;
}
public void setLegs(Integer legs) {
this.legs = legs;
}
@Override
public String toString() {
return "Dog{" +
"age=" + age +
", legs=" + legs +
'}';
}
}
Person.java
package com.zhanshen.domain;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
*
* 将配置文件中的每一个值映射到bean里边,我们就需要一个注解
* @ConfigurationProerties 该注解就是springboot将配置文件中的值与该类所有属性相绑定
* 里边有一个prefix的值,就是要指明绑定那一个数据,这里边server 和 person要选一个,明显我们要绑定Person
* 只有这个组件是容器中的组件,才能使用容器中的功能.所以我们再添加一个注解@Component
*/
@Component
@ConfigurationProperties(prefix = "Person")
public class Person {
private String username;
private Integer age;
private Date birthday;
private boolean boss;
private Map<String, Object> maps;
private List<Object> lists;
private Dog dog;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public boolean isBoss() {
return boss;
}
public void setBoss(boolean boss) {
this.boss = boss;
}
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;
}
@Override
public String toString() {
return "Person{" +
"username='" + username + '\'' +
", age=" + age +
", birthday=" + birthday +
", boss=" + boss +
", maps=" + maps +
", lists=" + lists +
", dog=" + dog +
'}';
}
}
然后我们在resources里边新建Application.yml
文件,内容如下
server:
port: 8888
Person:
username: 张三
age: 18
birthday: 2000/05/02
boss: false
maps: {k1: v1,k2: v2}
lists:
- 1
- 2
- 3
- 4
dog:
age: 12
legs: 4
然后我们就要想办法,把这里边的yml绑定到bean文件里边,这里用到了@ConfigurationProperties
注解,详细使用写在了注释里边
我们还可以导入一个依赖在pom.xml中,他会对你写的yml进行提示,有助于编写
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
接下来我们进入test里边
代码如下
package com.zhanshen.springboot;
import com.zhanshen.domain.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;
/**
*
* springboot的单元测试
*/
@RunWith(SpringRunner.class)
@SpringBootTest //声明这是springboot的单元测试
class SpringbootConfigTestApplicationTests {
@Autowired
private Person person;
@Test
public void contextLoads() {
System.out.println(person);
}
}
这里注意若无法引入@RunWith
注解,则可以查看自己的pom.xml
文件,找到下边这一条配置,把<exclusion>
这个标签注释掉就可以了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<!--<exclusions>-->
<!--<exclusion>-->
<!--<groupId>org.junit.vintage</groupId>-->
<!--<artifactId>junit-vintage-engine</artifactId>-->
<!--</exclusion>-->
<!--</exclusions>-->
</dependency>
另外还可以看到测试类里边有一个报错
这个时候我们需要在Application
类里边引入要扫描的包,注意这个是Java目录下的主文件
然后我们运行测试类
可以看到注入成功了