在实际开发中,应用程序通常需要部署到不同的运行环境中,如开发环境、测试环境、生产2.4Profile 多环境配置环境等。不同的环境可能需要不同的环境配置,针对这种情况,显然手动修改配置文件适应不同开发环境的做法是不太现实的,此时通常会对项目进行多环境配置。SpringBoot框架提供了两种多环境配置的方式,分别是Profie 文件多环境配置和@Profile 注解多环境配置。
1.使用 Profile 文件进行多环境配置
在 Spring Boot 框架中,使用 Profile 配置文件进行多环境配置时,该配置文件名必须满足application-{profile).properties 的格式,其中|profile)对应具体的环境标识。这里以开发环境测试环境和生产环境为例,编写对应环境的配置文件,示例代码如下。
application-dev.properties //开发环境配置文件
application-test.properties //测试环境配置文件
application-prod.properties //生产环境配置文件
如果想要使用上述对应环境的配置文件,只需要在 Spring Boot全局配置文件中激活指定环境的配置文件即可。例如,在控制台执行下列命令激活环境配置,命令如下:
java -jar xxx.jar-spring,profiles.active-dev
除了在控制台使用命令激活指定环境的方式外,还可以在项目全局配置文件中配置springprofiles.active 属性激活配置。这里以激活 dev开发环境配置文件为例,在全局配置文件 applicationproperties 中配置激活环境的属性,示例代码如下。
#激活开发环境配置文件
spring profiles,active=dev
接下来我们通过一个案例来演示Profle 多环境配置文件的具体使用,具体步骤如下。
(1)打开chapter02项目的resources 目录,在该目录下按照 Profile 文件命名规则创建不同运行环境对应的配置文件,这里分别创建 application-dev.properties、application-tesproperties 和 application-prod.properties 多环境配置文件,并在各个配置文件中对服务端口进行不同的设置,示例代码如下。
application-dev.properties
server port-8081
application-test.propertles
server.port=8082
application-prod.properties
server.port-8083
在 Spring Boot 项目中,程序内部默认端口为8080,而上述示例中通过 Profile 文件进行了多环境配置,不同的运行环境设置了不同的服务端口号。其中,application-dev.properties 开发环境中,设置服务端口号为8081;application-test.properties 测试环境中,设置服务端口号为8082;application-prod.properties生产环境中,设置服务端口号为8083。
(2)打开 chapter02 项目的resources 目录下的全局配置文件 application.properties,在该配置文件中配置 spring.profiles.active 属性选择性激活 Profile 文件设置,示例代码如下。
#指定要激活的profile多环境配置文件
spring.profiles.active-dev
上述代码中,在全局配置文件 application,properties 中指定激活了开发环境的配置文件,即application-dev.properties 配置文件。
(3)为了查看使用 Profile 文件进行多环境配置的效果,直接启动 chapter02 项目的启动类Chapter02Application,并查看控制台输出效果,程序正常启动,并显示服务启动的端口号为8081,这与选择激活的配置文件 application-dev.properties 中的端口号一致,说明 Profile 多环境配置文件生效。如果想使用 Profle 文件激活其他环境,可以在全局配置文件 application.properties 中设置对应的配置文件,重启项目查看效果。
2.使用@Profile 注解进行多环境配置
除了使用 Profile 文件进行多环境配置外,还可以使用@Profile 注解进行多环境配置。@Profile注解主要作用于类,并通过 value 属性指定配置环境(等同于Profile 文件名称中的 profile 值)。使用@Profile 注解配置的环境,同样需要在全局配置文件中激活。
下面通过一个案例来演示如何使用@Profile 注解进行多环境配置,具体步骤如下。
(1)在 chapter02 项目的 com,itheima.config 包下,创建一个用于配置数据库的接口文件DBConnector,具体如下所示。
1 public interface DBConnector {
2 public void configure();
3 }
(2)在com.itheima.config 包下,创建三个实现了 DBConnector接口的类 DevDBConnector.2TestDBConnector和 ProdDBConnector 并重写 configure()方法,分别模拟连接配置不同的数据库环境,具体如1.0.1、1.0.2、1.0.3所示。
1.0.1
1 import org.springframework,context,annotation.Configuration;
2 import org.springframework.context.annotation,Profile;
3 @Configuration
4 @Profile("dev") //指定多环境配置类标识
5 public class DevDBConnector implements DBConnector{
6 @Override
7 public void configure(){
8 System.out.println("数据库配置环境 dev");
9 }
10 }
1.0.2
1 import org,springframework.context.annotation.Configuration;
2 import org.springframework.context.annotation.Profile;
3 @Confiquration
4 @Profile("test") //指定多环境配置类标识
5 public class TestDBConnector implements DBConnector {
6 @Override
7 public void configure(){
8 System.out.println("数据库配置环境 test");
9 }
10 }
1.0.3
1 import org.springframework.context,annotation.Configuration;
2 import org.springframework.context.annotation.Profile;
3 @Configuration
4 @Pzofile("prod") //指定多环境配置类标识
5 public class ProdDBConnector implements DBConnector{
6 @Override
7 public void confiqure(){
8 system.out.println("数据库配置环境 prod");
9 }
10 }
上述三个实现类都使用了@Configuration 和@Profile 注解,其中,@Configuration 注解将实现类声明为配置类,可以保证 Spring Boot 自动扫描并识别;@Profile 注解用于进行多环境配置并通过属性标识配置环境。
(3)在全局配置文件 application.properties 中设置 spring.profiles.active 属性激活使用@Profile注解构建的多环境配置。
(4)为了测试@Profile 注解多环境配置的效果,在 chapter02项目中新建一个 com.itheimacontroller 包,并在该包下创建一个表示数据库连接配置的 DBController 类进行测试,具体如1.0.4所示。
1.0.4
1 import com.itheima.config.DBConnector;
2 import org,springframework,beans.factory,annotation,Autowired;
3 import org,springframework.web.bind.annotation.GetMapping;
4 import org.springframework.web.bind.annotation.RestController;
5 @RestController
6 public class DBcontroller{
7 @Autowired
8 private DBConnector dbConnector;
9 @GetMapping ("/showDB" )
10 public void showDB(){
11 dbConnector.configure();
12 }
13 }
1.0.4中@Autowired 注解用于注入DBConnector,@GetMapping(“/showDB”)注解用于映射 GET请求,这里用来映射路径为“/showDB”的请求。
(5)启动 chapter02 项目的 Chapter02Application 启动类,查看控制台输出效果,程序能够正常启动,并且控制台显示 dev 开发环境的端口号是 8081,说明通过 Profie 文件配置的多环境仍然生效。
控制台的端口号为 8081,并打印出指定标识为 dev的数据库配置信息,也就是说程序执行了数据库连接配置方法configure()。由此可知无论使用 Profile 文件还是@Profile 注解类都可以进行多环境配置,而且相互之间不会干扰。