在项目运行中,包括多种环境,例如线上环境prod(product)、开发环dev(development)、测试 环境test、提测环境qa、单元测试unitest等等。不同的环境需要进行不同的配置,从而在不同的 场景中跑我们的程序。例如prod环境和dev环境通常需要连接不同的数据库、需要配置不同的日志 输出配置。还有一些类和方法,在不同的环境下有不同的实现方式。
Spring Boot 对此提供了支持,一方面是注解@Profile,另一方面还有多资源配置文件。
一. @Profile
@profile 注解的作用是指定类或方法在特定的 Profile 环境生效,任何 @Component 或@Configuration 注解的类都可以使用 @Profile 注解。在使用DI来依赖注入的时候,能够根据 @profile 标明的环境,将注入符合当前运行环境的相应的bean。
使用要求:
@Component 或 @Configuration 注解的类可以使用 @profile
@Profile 中需要指定一个字符串,约定生效的环境
@Configuration
public class DemoConfigurtion {
@Bean
@Profile("prod")
public String prod(){
System.out.println("prod");
return "prod";
}
@Bean
@Profile("dev")
public String dev(){
System.out.println("dev");
return "dev";
}
}
@Profile可以作用到类上也可以用到方法上也可以用到注解上,用到注解上,使用此注解就不用使用@Profile这个注解了
在配置文件中激活@Profile注解
spring:
profiles:
active: prod
也可以使用命令行激活profile
在打包后运行的时候,添加参数:
java -jar demo-SNAPSHOT.jar --spring.profiles.active=dev;
二.资源配置文件
1.首先添加两个配置文件
2.在application-dev.yml中设置端口为8888
server:
port: 8888
3.在application-prod.yml中设置端口为9999
server:
port: 9999
4.在application.yml中设置使用那个配置文件
spring:
profiles:
active: prod
5.启动项目测试走的是那个配置文件
可以看出走的是prod的配置文件
修改application.yml 中
spring:
profiles:
active: dev
查看效果,可以看出是dev环境的,这样就可以实现在不同的环境中使用不同的配置进行部署了