Spring Boot 配置文件

Spring Boot 简化了 Spring 应用的创建、运行、调试、部署等一系列问题。Spring Boot 自动装配的特性让我们可以更好的关注业务本身而不是外部的 XML 配置,我们只需遵循规范,引入相关的依赖就可以轻易的搭建出一个 WEB 工程。

 

1. Spring Boot 配置文件格式

Spring Boot 主配置文件默认为 application.yml 或者 application.properties,我们可以根据自己的使用习惯,任取两种格式的文件之一即可。

为了让 Spring Boot 更好的生成数据,我们需要添加如下依赖(该依赖可以不添加,但是在 IDEA 不会有属性提示),该依赖只会在编译时调用,所以不用担心会对生产造成影响。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

 

2. @Value 注解

这种方式是 Spring 最早提供的读取配置文件的方式。@Value 注解的方式用在属性上,但是要求该属性所在的类必须要被 Spring 管理。

比如,我们配置文件 application.properties 如下:

cn.com.my.test1=test1
cn.com.my.test2=test2  

如果使用 application.yml,上述配置文件内容如下:

cn:
  com:
    my:
      test1: test1
      test2: test2

在上一章的工程中,增加 com.example.demo.controller 包,并创建 TestValueController 类。

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestValueController {

    @Value("${cn.com.my.test1}")
    private String test1;
    @Value("${cn.com.my.test2}")
    private String test2;

    @RequestMapping("/test/value")
    @ResponseBody
    public String getTest(){
        return "TestValueController - test1: " + test1 +", test2: "+test2;
    }
}

运行后,通过浏览器输入 http://localhost:8080/test/value,输出内容为:TestValueController - test1: test1, test2: test2。

 

2. @ConfigurationProperties 注解

@ConfigurationProperties 注解由 Spring Boot 提供,在 Spring Boot 中大量使用。我们以下讲解它的用法。

首先需要使用 @Component 注解定义一个类 ConfProperty。

package com.example.demo.controller;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "cn.com.my")

public class ConfProperty {
    private String test1;
    private String test2;

    //必须有 set 方法
    public void setTest1(String test1) {
        this.test1 = test1;
    }

    //必须有 set 方法
    public void setTest2(String test2) {
        this.test2 = test2;
    }

    public String getTest1() {
        return test1;
    }

    public String getTest2() {
        return test2;
    }
}

该类上使用了 @ConfigurationProperties 注解,且配置了 prefix 属性,指定了要获取属性的前缀,这里的前缀是 cn.com.my,在类中定义的属性名最好和 application.properties 文件中的一致。

测试类 TestConfController 如下:

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestConfController {
    @Autowired
    private ConfProperty confProperty;

    @RequestMapping("test/conf")
    @ResponseBody
    public String getTest(){
        return "TestConfController - test1: " + confProperty.getTest1() +", test2: "+ confProperty.getTest2();
    }
}

运行后,通过浏览器输入 http://localhost:8080/test/value,输出内容为:TestConfController - test1: test1, test2: test2。

 

3. Environment 对象

使用 Environment 对象,该对象是 Spring 提供的一个对象,且是 Spring 内部创建的对象。

我们增加一个类 TestEnvController,测试 Environment 对象。

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestEnvController {
    @Autowired
    private Environment environment;

    @RequestMapping("/test/env")
    @ResponseBody
    public String getTest(){
        return "TestEnvController - test1: " + environment.getProperty("cn.com.my.test1") + " , "+ " test2: " + environment.getProperty("cn.com.my.test2");
    }
}

运行后,通过浏览器输入 http://localhost:8080/test/env,输出内容为:TestEnvController - test1: test1, test2: test2。

使用 Docker 部署 Spring Boot 项目有多种方法,既可以通过人工通过 docker 命令进行制作,也可以通过 Maven 插件直接生成。我们主要讲使用 IntelliJ ID ...