• 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

    当执行 java -jar xxx.jar --spring.profiles.actvie=test 此时,系统将启用 application.ymlapplication-test.yml 配置文件。

    当执行 java -jar xxx.jar --spring.profiles.actvie=prod 此时,系统将启用 application.ymlapplication-prod.yml 配置文件。

    正是这种配置参数可以决定我们使用哪种配置文件,如果我们把不同环境的配置写在对应的配置文件中,我们就可以实现多环境机制。

    二、配置多环境

    正如 第一 点所述,我们配置不同的配置文件

    • 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 或其他即可。

    这种方法只有在本地调试的时候才生效。

    四、程序中获取 applicaton 中的值

    @Component
    @ConfigurationProperties(prefix = "springstudy")
    public class MultienvConfig {
        private String demoname;
    
        public String getDemoname() {
            return demoname;
        }
    
        public void setDemoname(String demoname) {
            this.demoname = demoname;
        }
    }
    

    五、程序示例

    5.1 新建一个工程

    • groupId=com.fishpro
    • artifactId=springstudy
    • 项目名称 spring-boot-study-multienv

    5.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
    

    5.2 新建文件 fishpro.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;
        }
    }
    

    5.3 新建 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.4 运行 SpringstudyApplication.java

    右键 SpringstudyApplication.java 执行 Run SpringstudyApplication

    运行程序 http://localhost:8081/ 在控制台中输出

    2019-07-08 23:37:05.223  INFO 66267 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
    2019-07-08 23:37:05.223  INFO 66267 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
    2019-07-08 23:37:05.229  INFO 66267 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 6 ms
    2019-07-08 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/ 在控制台中输出

    2019-07-08 23:42:44.906  INFO 66281 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
    2019-07-08 23:42:44.910  INFO 66281 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 4 ms
    2019-07-08 23:42:44.930  INFO 66281 --- [nio-8081-exec-1] c.f.s.controller.IndexController         : multienv-prod
    
  • 相关阅读:
    Python运算符,基本数据类型
    Python2 错误记录1File "<string>", line 1, in <module> NameError: name 'f' is not defined
    用户登录三次练习
    跟我一起学Python-day1(条件语句以及初识变量)
    vim operation
    步步为营-28-事件本质
    步步为营-27-事件
    步步为营-26-多播委托
    步步为营-25-委托(比大小)
    步步为营-24-委托
  • 原文地址:https://www.cnblogs.com/fishpro/p/spring-boot-study-multienv.html
Copyright © 2020-2023  润新知