一、默认的Profile
如果不指定要激活的Profile,SpringBoot会使用默认的default环境。我们在启动日志中可以看到:
2023-08-26 23:16:31.572 INFO 6440 --- [ main] c.e.w.WebSocketDemoApplication : No active profile set, falling back to 1 default profile: "default"
2023-08-26 23:16:32.440 INFO 6440 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
二、激活Profile
我们可以使用spring.profiles.active参数指定要激活的Profile,比如我们在application.properties文件中设置spring.profiles.active=dev就说明我们当前的项目使用dev这个配置文件。
我们创建两个配置文件,并且激活了dev环境。
我们启动项目然后发现启动日志使用了dev的环境配置。
2023-08-26 23:23:49.432 INFO 8780 --- [ main] c.e.w.WebSocketDemoApplication : The following 1 profile is active: "dev"
2023-08-26 23:23:50.403 INFO 8780 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2023-08-26 23:23:50.411 INFO 8780 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2023-08-26 23:23:50.411 INFO 8780 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.78]
2023-08-26 23:23:50.611 INFO 8780 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2023-08-26 23:23:50.611 INFO 8780 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1121 ms
2023-08-26 23:23:51.025 INFO 8780 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path ''
我们还可以再启动方法上进行激活。
示例代码如下:
package com.example.websocketdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class WebSocketDemoApplication {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(WebSocketDemoApplication.class);
springApplication.setAdditionalProfiles("dev");
springApplication.run(args);
}
}
我们启动项目可以实现同样的效果。
2023-08-26 23:26:00.958 INFO 8028 --- [ main] c.e.w.WebSocketDemoApplication : The following 1 profile is active: "dev"
2023-08-26 23:26:01.906 INFO 8028 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2023-08-26 23:26:01.914 INFO 8028 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2023-08-26 23:26:01.915 INFO 8028 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.78]
2023-08-26 23:26:02.121 INFO 8028 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2023-08-26 23:26:02.121 INFO 8028 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1095 ms
2023-08-26 23:26:02.518 INFO 8028 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path ''
2023-08-26 23:26:02.529 INFO 8028 --- [ main] c.e.w.WebSocketDemoApplication : Started WebSocketDemoApplication in 2.18 seconds (JVM running for 4.155)
三、切换Profile
我们还可以通过命令行参数的方式临时替换Profile,比如:java -jar demo.jar --spring.profiles.active=dev
命令行参数的优先级要比配置文件的优先级高,所以这样会用到dev的环境。
四、概括
Profile中常用的几个参数如下所示:
参数 | 功能 | 说明 |
spring.profiles.default | 指定默认的Profile | 当不指定Profile时,默认生效的Profile |
spring.profiles.active | 激活指定的Profile | 可以被优先级高的配置源替换 |
spring.profiles.include | 激活指定要包含的Profile | 不会被其他配置源替换 |
spring.profiles.group | 指定Profile分组 | 激活一个分组,就会激活组下所有Profile |
注意,Profile有一些使用上的限制,不能随意搭配使用,以上几个参数不能用于多文档配置中和指定Profile配置文件。