SpringBoot配置注入
springboot有两种常用的配置文件,properties和yml,默认配置文件名称是固定的,为application。
application.properties 语法结构 :key=value 例如 server.port=80 application.yml 语法结构 :key:空格 value 例如 server: port:80
以上两种配置文件代替传统的xml配置文件 例如:
<server>
<port>80</port>
</server>
通过@Value注解手动写入
具体代码如下:
@Component
public class Book {
@Value("水浒传") //设置默认值
private String bookName;
@Value("400")
private int pageNum;
//省略get,set
@Override
public String toString() {
return "Book{" +
"bookName='" + bookName + '\'' +
", pageNum=" + pageNum +
'}';
}
}
@SpringBootTest
public class testDemo {
@Autowired
private Book book;
@Test
public void testStudent(){
System.out.println(book);
}
}
结果如下:Book{bookName='水浒传', pageNum=400}
这种类似于直接赋值的方式有很明显的缺陷,不易进行定位和修改。
通过properties配置文件注入
待注入的pojo类如下:
@Component //作为组件注入到springboot中 @PropertySource(value = "classpath:syw.properties") //指定要使用的配置文件,如果不指定则默认使用application.properties public class Teacher { @Value("${teacher.teacherName}") private String teacherName; @Value("${teacher.age}") private int age; //省略get,set @Override public String toString() { return "Teacher{" + "teacherName='" + teacherName + '\'' + ", age=" + age + '}'; } }
下面是syw.properties配置文件中的内容:
# 只能通过该方式初始化值,相比yaml来说,操作对象,数组,集合等不太方便 teacher.teacherName=Dream Data teacher.age=22
测试类以及结果如下:
@SpringBootTest public class testDemo { @Autowired private Teacher teacher; @Test public void testStudent(){ System.out.println(teacher); } }
输出结果:Teacher{teacherName='Dream Data ', age=22}
注意:
applicaiton文件使用中文内容的时候会乱码,需要配置properties文件的编码格式,如下图所示:
通过yml配置文件注入
首先了解一下yml的语法格式:
注意: 1、空格不能省略 2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。 3、属性和值的大小写都是十分敏感的。 自变量:普通的值 [ 数字,布尔值,字符串 ] 自变量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号;k: v 注意: “ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为普通字符输出 比如 :name: "dream \n data" 输出 :dream \n data '' 单引号,会转义特殊字符 , 特殊字符最终会变成本身所表达的意思 比如 :name: 'dream \n data' 输出 :dream 换行 data 对象、Map(键值对) #对象、Map格式 k: v1: v2: 在下一行来写对象的属性和值得关系,注意缩进;比如: student: name: syw age: 3 行内写法 student: {name: syw,age: 3} 数组( List、set ) 用 - 值表示数组中的一个元素,比如: pets: - cat - dog - pig 行内写法 pets: [cat,dog,pig]
1.下面是使用yml配置文件复杂对象:
/** * @ConfigurationProperties作用: * 将配置文件中配置的每一个属性的值,映射到这个组件中; * 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定 * 参数 prefix = “student” : 将配置文件中的student下面的所有属性一一对应 */ @Component @ConfigurationProperties(prefix = "student") public class Student { private String studentName; private Integer age; private Boolean happy; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Teacher teacher; //省略get,set @Override public String toString() { return "Student{" + "studentName='" + studentName + '\'' + ", age=" + age + ", happy=" + happy + ", birth=" + birth + ", maps=" + maps + ", lists=" + lists + ", teacher="+ teacher+ '}'; } }
2.通过yml文件注入简单对象
@Component public class Dog { @Value("${dog.dogName}") //通过该方式自动赋值为yaml文件中的初始值 private String dogName; @Value("${dog.age}") private String age; @Override public String toString() { return "Dog{" + "dogName='" + dogName + '\'' + ", age='" + age + '\'' + '}'; } }
配置文件application.yml的内容如下:
student: studentName: syw age: 22 happy: false birth: 2000/01/01 maps: {k1: v1,k2: v2} lists: - code - movie - music teacher: teacherName: 鬼谷子 age: 100 dog: dogName: 小明 age: 10
测试类与结果如下
@SpringBootTest public class testDemo { @Autowired private Student student; @Autowired private Dog dog; @Test public void testStudent(){ System.out.println(student); System.out.println(dog); } }
1.复杂对象的结果如下:
Student{studentName='syw', age=22, happy=false, birth=Sat Jan 01 00:00:00 CST 2000, maps={k1=v1, k2=v2}, lists=[code, movie, music], teacher=Teacher{teacherName='鬼谷子', age=100}}
2.简单对象的结果如下:
Dog{dogName='小明', age='10'}
Pom文件引入插件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.11.Release</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.henu</groupId>
<artifactId>config</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>SpringBoot-Config</name>
<description>config</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
...
<!--添加配置文件提示,让自己手动添加的Component组建在初始化的时候也有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--打包的时候不用打包这个插件-->
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
引入插件,此时会有提示,方便书写
-END-
全部评论