学科分类
目录
Spring Boot开发

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配置文件属性配置正确,并通过相关注解自动完成了属性注入。

点击此处
隐藏目录