一、简单介绍
在项目的开发中,有些配置文件在开发、测试或者生产等不同环境中可能是不同的,例如数据库连接、redis的配置等等。那我们如何在不同环境中自动实现配置的切换呢?Spring给我们提供了profiles机制,下面看看在Spring Boot中是如何使用Profiles功能的。
在Spring Boot中多环境配置文件名需要使用application-{profile}.properties的格式,这里的**{profile}**对应的是你的环境标识。例如:
- application-dev.properties — 这是开发环境
- application-prod.properties — 这是生产环境
二、激活指定profile
我们在首先在Resource目录下新建两个配置文件,分别命名为application-dev.properties以及application-prod.properties,为了方便看到区别,我们分别在三个配置文件中分别指定tomcat启动端口:
application.properties
server.port=8081
application-dev.properties
server.port=8082
application-prod.properties
server.port=8083
这个时候我们没有指定任何profile,执行启动类的main方法,可以看到:
Tomcat started on port(s): 8081 (http) with context path ''
程序会默认加载application.properties中的配置,我们想要使用对应的环境,只需要在application.properties中使用spring.profiles.active属性来设置,值对应上面提到的{profile},这里就是指dev、prod:
server.port=8081
spring.profiles.active=dev
重新启动Main方法:
Tomcat started on port(s): 8082 (http) with context path ''
可以看到tomcat启动端口为8082。
####从上面的结果可以看出,application-dev.properties中的配置覆盖了application.propertie中的配置。我们在配置文件中可以将与环境无关的属性放到application.propertie中进行配置,而根据环境的变化而变化的配置放到各个application-{profile}.properties文件中。
三、激活profile的方式
上面展示了第一种激活profile的方式,即在application.properties中指定属性spring.profiles.active的值。但是这种方式在实际项目中的使用并不合适,因为你每次提交代码还要手动修改pring.profiles.active的值。
第二种可以使用命令行的方式,Spring Boot的程序一般是打成jar包,在使用java -jar 执行jar包的时候,可以再后面加上:
--spring.profiles.active=dev;
例如
java -jar target/spring-boot-helloworld-0.0.1.jar --spring.profiles.active=prod
可以看到启动端口为:
Tomcat started on port(s): 8083 (http) with context path ''
若是使用IDEA进行开发的话,还可以修改启动配置:
之后执行Main方法,依然激活了dev的配置。
第三种是修改虚拟机的配置,在虚拟机配置哪里加上:
-Dspring.profiles.active=dev
之后执行Main方法,同样激活了dev的配置。