Spring Boot 简明教程
Spring Boot - Application Properties
应用程序属性支持我们在不同环境中工作。在本章中,你将学习如何配置和指定 Spring Boot 应用程序的属性。
Application Properties support us to work in different environments. In this chapter, you are going to learn how to configure and specify the properties to a Spring Boot application.
Command Line Properties
Spring Boot 应用程序将命令行属性转换为 Spring Boot 环境属性。命令行属性优先于其他属性源。默认情况下,Spring Boot 使用 8080 端口号启动 Tomcat。让我们了解如何使用命令行属性更改端口号。
Spring Boot application converts the command line properties into Spring Boot Environment properties. Command line properties take precedence over the other property sources. By default, Spring Boot uses the 8080 port number to start the Tomcat. Let us learn how change the port number by using command line properties.
Step 1 − 创建可执行 JAR 文件后,使用命令 java –jar <JARFILE> 运行它。
Step 1 − After creating an executable JAR file, run it by using the command java –jar <JARFILE>.
Step 2 − 使用下面截图中给出的命令,通过使用命令行属性更改 Spring Boot 应用程序的端口号。
Step 2 − Use the command given in the screenshot given below to change the port number for Spring Boot application by using command line properties.
Note − 使用分隔符 − 可以提供多个应用程序属性。
Note − You can provide more than one application properties by using the delimiter −.
Properties File
属性文件用于将“N”个属性保留在一个文件中,以在不同的环境中运行应用程序。在 Spring Boot 中,属性保存在 classpath 下的 application.properties 文件中。
Properties files are used to keep ‘N’ number of properties in a single file to run the application in a different environment. In Spring Boot, properties are kept in the application.properties file under the classpath.
application.properties 文件位于 src/main/resources 目录中。示例 application.properties 文件的代码如下 −
The application.properties file is located in the src/main/resources directory. The code for sample application.properties file is given below −
server.port = 9090
spring.application.name = demoservice
请注意,在上面显示的代码中,Spring Boot 应用程序 demoservice 在端口 9090 上启动。
Note that in the code shown above the Spring Boot application demoservice starts on the port 9090.
YAML File
Spring Boot 支持基于 YAML 的属性配置以运行应用程序。我们可以使用 application.yml 文件代替 application.properties 。此 YAML 文件还应保留在 classpath 中。示例 application.yml 文件如下 −
Spring Boot supports YAML based properties configurations to run the application. Instead of application.properties, we can use application.yml file. This YAML file also should be kept inside the classpath. The sample application.yml file is given below −
spring:
application:
name: demoservice
server:
port: 9090
Externalized Properties
我们可以将属性保留在不同位置或路径,而不用将属性文件保留在 classpath 中。在运行 JAR 文件时,我们可以指定属性文件路径。你可以使用以下命令来指定运行 JAR 时属性文件的位置 −
Instead of keeping the properties file under classpath, we can keep the properties in different location or path. While running the JAR file, we can specify the properties file path. You can use the following command to specify the location of properties file while running the JAR −
-Dspring.config.location = C:\application.properties
Use of @Value Annotation
@Value 注释用于在 Java 代码中读取环境或应用程序属性值。读取属性值的语法如下所示 −
The @Value annotation is used to read the environment or application property value in Java code. The syntax to read the property value is shown below −
@Value("${property_key_name}")
请看以下示例,它展示了使用 @Value 注解在 Java 变量中读取 spring.application.name 属性值时的语法。
Look at the following example that shows the syntax to read the spring.application.name property value in Java variable by using @Value annotation.
@Value("${spring.application.name}")
为得到更好的理解,观察下面给出的代码 −
Observe the code given below for a better understanding −
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}" 。
Note − If the property is not found while running the application, Spring Boot throws the Illegal Argument exception as Could not resolve placeholder 'spring.application.name' in value "${spring.application.name}".
要解决占位符问题,我们可以使用下面给出的语法为属性设置默认值 −
To resolve the placeholder issue, we can set the default value for the property using thr syntax given below −
@Value("${property_key_name:default_value}")
@Value("${spring.application.name:demoservice}")
Spring Boot Active Profile
Spring Boot 支持基于 Spring 活动配置文件的不同属性。例如,我们可以保持两个独立的文件,用于开发和生产,以运行 Spring Boot 应用程序。
Spring Boot supports different properties based on the Spring active profile. For example, we can keep two separate files for development and production to run the Spring Boot application.
Spring active profile in application.properties
让我们了解如何在 application.properties 中使用 Spring 活动配置文件。默认情况下,application.properties 将用于运行 Spring Boot 应用程序。如果您要使用基于配置文件的属性,我们可以为每个配置文件保存独立的属性文件,如下所示 −
Let us understand how to have Spring active profile in application.properties. By default, application. properties will be used to run the Spring Boot application. If you want to use profile based properties, we can keep separate properties file for each profile as shown below −
application.properties
application.properties
server.port = 8080
spring.application.name = demoservice
application-dev.properties
application-dev.properties
server.port = 9090
spring.application.name = demoservice
application-prod.properties
application-prod.properties
server.port = 4431
spring.application.name = demoservice
在运行 JAR 文件时,我们需要基于每个属性文件指定 Spring 活动配置文件。默认情况下,Spring Boot 应用程序使用 application.properties 文件。设置 Spring 活动配置文件的命令如下所示 −
While running the JAR file, we need to specify the spring active profile based on each properties file. By default, Spring Boot application uses the application.properties file. The command to set the spring active profile is shown below −
您可以在控制台日志中看到活动配置文件名,如下所示 −
You can see active profile name on the console log as shown below −
2017-11-26 08:13:16.322 INFO 14028 --- [
main] com.tutorialspoint.demo.DemoApplication :
The following profiles are active: dev
现在,Tomcat 已在端口 9090(http)上启动,如下所示 −
Now, Tomcat has started on the port 9090 (http) as shown below −
2017-11-26 08:13:20.185 INFO 14028 --- [
main] s.b.c.e.t.TomcatEmbeddedServletContainer :
Tomcat started on port(s): 9090 (http)
您可以将生产活动配置文件设置如下所示 −
You can set the Production active profile as shown below −
您可以在控制台日志中看到活动配置文件名,如下所示 −
You can see active profile name on the console log as shown below −
2017-11-26 08:13:16.322 INFO 14028 --- [
main] com.tutorialspoint.demo.DemoApplication :
The following profiles are active: prod
现在,Tomcat 已在端口 4431(http)上启动,如下所示 −
Now, Tomcat started on the port 4431 (http) as shown below −
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 那样使用独立的文件。
Let us understand how to keep Spring active profile for application.yml. We can keep the Spring active profile properties in the single application.yml file. No need to use the separate file like application.properties.
下面是一个示例代码,用于将 Spring 活动配置文件保存在 application.yml 文件中。请注意,分隔符 (---) 用于在 application.yml 文件中分隔每个配置文件。
The following is an example code to keep the Spring active profiles in application.yml file. Note that the delimiter (---) is used to separate each profile in application.yml file.
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
设置开发活动配置文件的命令如下所示 −
To command to set development active profile is given below −
您可以在控制台日志中看到活动配置文件名,如下所示 −
You can see active profile name on the console log as shown below −
2017-11-26 08:41:37.202 INFO 14104 --- [
main] com.tutorialspoint.demo.DemoApplication :
The following profiles are active: dev
现在,Tomcat 已在端口 9090(http)上启动,如下所示 −
Now, Tomcat started on the port 9090 (http) as shown below −
2017-11-26 08:41:46.650 INFO 14104 --- [
main] s.b.c.e.t.TomcatEmbeddedServletContainer :
Tomcat started on port(s): 9090 (http)
设置生产活动配置文件的命令如下所示 −
The command to set Production active profile is given below −
您可以在控制台日志中看到活动配置文件名,如下所示 −
You can see active profile name on the console log as shown below −
2017-11-26 08:43:10.743 INFO 13400 --- [
main] com.tutorialspoint.demo.DemoApplication :
The following profiles are active: prod
如下所示,这将启动 4431 端口(http)上的 Tomcat:
This will start Tomcat on the port 4431 (http) as shown below:
2017-11-26 08:43:14.473 INFO 13400 --- [
main] s.b.c.e.t.TomcatEmbeddedServletContainer :
Tomcat started on port(s): 4431 (http)