Spring Boot 简明教程
Spring Boot - Application Properties
应用程序属性支持我们在不同环境中工作。在本章中,你将学习如何配置和指定 Spring Boot 应用程序的属性。
Command Line Properties
Spring Boot 应用程序将命令行属性转换为 Spring Boot 环境属性。命令行属性优先于其他属性源。默认情况下,Spring Boot 使用 8080 端口号启动 Tomcat。让我们了解如何使用命令行属性更改端口号。
Step 1 − 创建可执行 JAR 文件后,使用命令 java –jar <JARFILE> 运行它。
Step 2 − 使用下面截图中给出的命令,通过使用命令行属性更改 Spring Boot 应用程序的端口号。
Note − 使用分隔符 − 可以提供多个应用程序属性。
Properties File
属性文件用于将“N”个属性保留在一个文件中,以在不同的环境中运行应用程序。在 Spring Boot 中,属性保存在 classpath 下的 application.properties 文件中。
application.properties 文件位于 src/main/resources 目录中。示例 application.properties 文件的代码如下 −
server.port = 9090
spring.application.name = demoservice
请注意,在上面显示的代码中,Spring Boot 应用程序 demoservice 在端口 9090 上启动。
YAML File
Spring Boot 支持基于 YAML 的属性配置以运行应用程序。我们可以使用 application.yml 文件代替 application.properties 。此 YAML 文件还应保留在 classpath 中。示例 application.yml 文件如下 −
spring:
application:
name: demoservice
server:
port: 9090
Externalized Properties
我们可以将属性保留在不同位置或路径,而不用将属性文件保留在 classpath 中。在运行 JAR 文件时,我们可以指定属性文件路径。你可以使用以下命令来指定运行 JAR 时属性文件的位置 −
-Dspring.config.location = C:\application.properties
Use of @Value Annotation
@Value 注释用于在 Java 代码中读取环境或应用程序属性值。读取属性值的语法如下所示 −
@Value("${property_key_name}")
请看以下示例,它展示了使用 @Value 注解在 Java 变量中读取 spring.application.name 属性值时的语法。
@Value("${spring.application.name}")
为得到更好的理解,观察下面给出的代码 −
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication {
@Value("${spring.application.name}")
private String name;
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@RequestMapping(value = "/")
public String name() {
return name;
}
}
Note − 如果在运行应用程序时未找到属性,Spring Boot 会抛出 Illegal Argument 异常,形式为 Could not resolve placeholder 'spring.application.name' in value "${spring.application.name}" 。
要解决占位符问题,我们可以使用下面给出的语法为属性设置默认值 −
@Value("${property_key_name:default_value}")
@Value("${spring.application.name:demoservice}")
Spring Boot Active Profile
Spring Boot 支持基于 Spring 活动配置文件的不同属性。例如,我们可以保持两个独立的文件,用于开发和生产,以运行 Spring Boot 应用程序。
Spring active profile in application.properties
让我们了解如何在 application.properties 中使用 Spring 活动配置文件。默认情况下,application.properties 将用于运行 Spring Boot 应用程序。如果您要使用基于配置文件的属性,我们可以为每个配置文件保存独立的属性文件,如下所示 −
application.properties
server.port = 8080
spring.application.name = demoservice
application-dev.properties
server.port = 9090
spring.application.name = demoservice
application-prod.properties
server.port = 4431
spring.application.name = demoservice
在运行 JAR 文件时,我们需要基于每个属性文件指定 Spring 活动配置文件。默认情况下,Spring Boot 应用程序使用 application.properties 文件。设置 Spring 活动配置文件的命令如下所示 −
您可以在控制台日志中看到活动配置文件名,如下所示 −
2017-11-26 08:13:16.322 INFO 14028 --- [
main] com.tutorialspoint.demo.DemoApplication :
The following profiles are active: dev
现在,Tomcat 已在端口 9090(http)上启动,如下所示 −
2017-11-26 08:13:20.185 INFO 14028 --- [
main] s.b.c.e.t.TomcatEmbeddedServletContainer :
Tomcat started on port(s): 9090 (http)
您可以将生产活动配置文件设置如下所示 −
您可以在控制台日志中看到活动配置文件名,如下所示 −
2017-11-26 08:13:16.322 INFO 14028 --- [
main] com.tutorialspoint.demo.DemoApplication :
The following profiles are active: prod
现在,Tomcat 已在端口 4431(http)上启动,如下所示 −
2017-11-26 08:13:20.185 INFO 14028 --- [
main] s.b.c.e.t.TomcatEmbeddedServletContainer :
Tomcat started on port(s): 4431 (http)
Spring active profile for application.yml
让我们了解如何为 application.yml 保持 Spring 活动配置文件。我们可以将 Spring 活动配置文件属性保存在单个 application.yml 文件中。无需像 application.properties 那样使用独立的文件。
下面是一个示例代码,用于将 Spring 活动配置文件保存在 application.yml 文件中。请注意,分隔符 (---) 用于在 application.yml 文件中分隔每个配置文件。
spring:
application:
name: demoservice
server:
port: 8080
---
spring:
profiles: dev
application:
name: demoservice
server:
port: 9090
---
spring:
profiles: prod
application:
name: demoservice
server:
port: 4431
设置开发活动配置文件的命令如下所示 −
您可以在控制台日志中看到活动配置文件名,如下所示 −
2017-11-26 08:41:37.202 INFO 14104 --- [
main] com.tutorialspoint.demo.DemoApplication :
The following profiles are active: dev
现在,Tomcat 已在端口 9090(http)上启动,如下所示 −
2017-11-26 08:41:46.650 INFO 14104 --- [
main] s.b.c.e.t.TomcatEmbeddedServletContainer :
Tomcat started on port(s): 9090 (http)
设置生产活动配置文件的命令如下所示 −
您可以在控制台日志中看到活动配置文件名,如下所示 −
2017-11-26 08:43:10.743 INFO 13400 --- [
main] com.tutorialspoint.demo.DemoApplication :
The following profiles are active: prod
如下所示,这将启动 4431 端口(http)上的 Tomcat:
2017-11-26 08:43:14.473 INFO 13400 --- [
main] s.b.c.e.t.TomcatEmbeddedServletContainer :
Tomcat started on port(s): 4431 (http)