【Spring Boot】Spring Boot 如何配置多环境

通常一个公司的应程序可能在开发环境(dev)、测试环境(test)、生产环境(prod)中运行。

那么是不是需要拷贝不同的安装包,在不同的环境下运行呢?
完全不用,在 Spring Boot 中一切已经为我们准备就绪,只需要简单的配置,你的程序就能在不同的环境中运行。

一、Spring Boot 环境设置机制

spring.profiles.active 属性可以为我们指定当前设置的环境,以此来选择我们的配置文件。例如我们有配置文件

  • application.yml
  • application-dev.yml
  • application-test.yml
  • application-prod.yml
    【Spring Boot】Spring Boot 如何配置多环境_第1张图片

当执行 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下配置不同的配置文件

  • application.yml
  • application-dev.yml(开发环境)
  • application-test.yml(测试环境)
  • application-uat.yml(预发布环境)
  • application-prod.yml(生产环境)

三、指定环境

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一起控制

四、程序中获取 applicaton 中的值

@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,其他三个新建就可以。

  • application.yml
server:
  port: 8081
spring:
  profiles:
    active: dev
  • application-dev.yml(开发环境)
springstudy:
  demoname: multienv-dev
  • application-test.yml(测试环境)
springstudy:
  demoname: multienv-test
  • application-uat.yml(预发布环境)
springstudy:
  demoname: multienv-uat
  • application-prod.yml(生产环境)
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

你可能感兴趣的:(Java学习知识总结,spring,boot,java,spring,maven)