通常一个公司的应程序可能在开发环境(dev)、测试环境(test)、生产环境(prod)中运行。
那么是不是需要拷贝不同的安装包,在不同的环境下运行呢?
完全不用,在 Spring Boot 中一切已经为我们准备就绪,只需要简单的配置,你的程序就能在不同的环境中运行。
spring.profiles.active
属性可以为我们指定当前设置的环境,以此来选择我们的配置文件。例如我们有配置文件
当执行 java -jar xxx.jar --spring.profiles.actvie=test
此时,系统将启用 application.yml 和 application-test.yml 配置文件。
当执行java -jar xxx.jar --spring.profiles.actvie=prod
此时,系统将启用 application.yml 和 application-prod.yml 配置文件。
正是这种配置参数可以决定我们使用哪种配置文件,如果我们把不同环境的配置写在对应的配置文件中,我们就可以实现多环境机制。
我们在resource下配置不同的配置文件
1. 在 cmd 命令中指定
java -jar xxx.jar --spring.profiles.actvie=dev
2. 在 application.yml 中指定
spring:
profiles:
active: dev
3. 在IDEA 编辑器中指定
在运行按钮(绿色三角形按钮)旁边选择 Edit Configurations…,在弹出的对话框中 Active profiles 输入 dev 或其他即可。
这种方法只有在本地调试的时候才生效。
4. 使用Maven的Profiles勾选激活
参考使用maven profile 动态激活不同环境、依赖打包部署
spring:
servlet:
profiles:
active: '@profile.active@' # 版本控制,同maven的profile一起控制
@Component
@ConfigurationProperties(prefix = "springstudy")
public class MultienvConfig {
private String demoname;
public String getDemoname() {
return demoname;
}
public void setDemoname(String demoname) {
this.demoname = demoname;
}
}
1.新建一个工程
2.新增以下文件
默认为 application.properties 直接重命名为 application.yml,其他三个新建就可以。
server:
port: 8081
spring:
profiles:
active: dev
springstudy:
demoname: multienv-dev
springstudy:
demoname: multienv-test
springstudy:
demoname: multienv-uat
springstudy:
demoname: multienv-prod
3.新建文件 com.springstudy.MultienvConfig.java
@Component
@ConfigurationProperties(prefix = "springstudy")
public class MultienvConfig {
private String demoname;
public String getDemoname() {
return demoname;
}
public void setDemoname(String demoname) {
this.demoname = demoname;
}
}
4.新建 controller/IndexController.java
@Controller
public class IndexController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
MultienvConfig multienvConfig;
@RequestMapping("/")
String index(){
logger.info(multienvConfig.getDemoname());
return "index";
}
}
5.运行 SpringstudyApplication.java
运行程序 http://localhost:8081/ 在控制台中输出
2022-11-18 23:37:05.252 INFO 66267 --- [nio-8081-exec-1] c.f.s.controller.IndexController : multienv-dev
修改 application.yml 中的配置
server:
port: 8081
spring:
profiles:
active: prod
运行程序 http://localhost:8081/ 在控制台中输出:
2022-11-18 23:42:44.930 INFO 66281 --- [nio-8081-exec-1] c.f.s.controller.IndexController : multienv-prod