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 ...