application.properties配置文件
使用Spring Initializr方式构建Spring Boot项目时,会在resource目录下自动生成一个空的application.properties文件,Spring Boot项目启动时会自动加载application.properties文件。
我们可以在application.properties文件中定义Spring Boot项目的相关属性,当然,这些相关属性可以是系统属性、环境变量、命令参数等信息,也可以是自定义配置文件名称和位置。示例代码如下:
server.address=80
server.port=8443
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.config.additional-location=
spring.config.location=
spring.config.name=application
更多配置属性,详见官网https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
。
接下来,通过一个案例对Spring Boot项目中application.properties配置文件的具体使用进行讲解。
(1)使用Spring Initializr方式创建一个名为chapter02的Spring Boot项目(本书统一指定创建项目的包结构为com.itheima),在Dependencies依赖选择中选择Web依赖。
(2)为了方便查看application.properties配置文件属性配置的效果,先在chapter02项目的com.itheima包下创建一个domain包,并在该包下创建两个实体类Pet和Person,内容如文件1和2所示。
文件1 Pet.java
1 public class Pet {
2 private String type;
3 private String name;
4 // 省略属性getXX()和setXX()方法
5 // 省略toString()方法
6 }
文件2 Person.java
1 import org.springframework.boot.context.properties.ConfigurationProperties;
2 import org.springframework.stereotype.Component;
3 import java.util.*;
4 @Component //用于将Person类作为Bean注入到Spring容器中
5 @ConfigurationProperties(prefix = "person") //将配置文件中以person开头的属性注入到该类中
6 public class Person {
7 private int id; //id
8 private String name; //名称
9 private List hobby; //爱好
10 private String[] family; //家庭成员
11 private Map map;
12 private Pet pet; //宠物
13 // 省略属性getXX()和setXX()方法
14 // 省略toString()方法
15 }
文件1和2预先准备了两个实体类文件,后续会演示将application.properties配置文件中的自定义配置属性注入到Person实体类的对应属性中。其中,@ConfigurationProperties(prefix = "person")注解的作用是将配置文件中以person开头的属性值通过setXX()方法注入到实体类对应属性中(此处只需要知道该注解的作用,后续将会进行详细说明);@Component注解的作用是将当前注入属性值的Person类对象作为Bean组件放到Spring容器中,只有这样才能被@ConfigurationProperties注解进行赋值。
小提示:
在上述自定义Person类中,添加了一个@Component注解,将该自定义类作为Spring容器的组件,其根本目的是让Spring Boot可以自动扫描到该组件,然后进行其他功能实现。而如果想要将一个自定义类添加为Spring容器的组件,除了可以使用@Component注解外,还可以使用@Controller、@Service、@Repository、@Configuration(关于该注解,会在后续小节进行详细讲解)等注解。
(3)打开chapter02的resources目录下的application.properties配置文件,在该配置文件中编写需要对Person类设置的配置属性,内容如文件3所示。
文件3 application.properties
1 #对实体类对象Person进行属性配置
2 person.id=1
3 person.name=tom
4 person.hobby=play,read,sleep
5 person.family=father,mother
6 person.map.k1=v1
7 person.map.k2=v2
8 person.pet.type=dog
9 person.pet.name=kity
文件3中,在Spring Boot默认全局配置文件application.properties中通过“person.xx”对Person的相关属性进行了配置,这些配置属性会通过@ConfigurationProperties(prefix = "person")注解注入到Person实体类的对应属性中。
小提示:
在编写application.properties配置文件时,由于要配置的Person对象属性是我们自定义的,Spring Boot无法自动识别,所以不会有任何书写提示。在实际开发中,为了出现代码提示的效果来方便配置,在使用@ConfigurationProperties注解进行配置文件属性值注入时,可以在pom.xml文件中添加一个Spring Boot提供的配置处理器依赖,示例代码如下。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
在pom.xml中添加上述配置依赖后,还需要重新运行项目启动类或者使用“Ctrl+F9”快捷键(即Build Project)重构当前Spring Boot项目方可生效。
(4)为了查看application.properties配置文件是否正确,同时查看属性配置效果,打开通过IDEA工具创建的chapter02项目测试类Chapter02ApplicationTests,在该测试类中引入Person实体类Bean,并进行输出测试,内容如文件4所示。
文件4 Chapter02ApplicationTests.java
1 import com.itheima.domain.Person;
2 import org.junit.Test;
3 import org.junit.runner.RunWith;
4 import org.springframework.beans.factory.annotation.Autowired;
5 import org.springframework.boot.test.context.SpringBootTest;
6 import org.springframework.test.context.junit4.SpringRunner;
7 @RunWith(SpringRunner.class)
8 @SpringBootTest
9 public class Chapter02ApplicationTests {
10 @Autowired
11 private Person person;
12 @Test
13 public void contextLoads() {
14 System.out.println(person);
15 }
16 }
文件4中,先通过@Autowired注解引入了Spring容器中的Person实体类Bean,然后在测试方法contextLoads()中对该Person对象进行了输出打印。
执行测试方法contextLoads()后,查看控制台输出效果,结果如图1所示。
图1 程序测试效果
从图1可以看出,测试方法contextLoads()运行成功,同时正确打印出了Person实体类对象。至此,说明application.properties配置文件属性配置正确,并通过相关注解自动完成了属性注入。