SpringBoot通过properties实现多个数据库环境自动切换配置

SpringBoot通过properties实现多个数据库环境自动切换配置

记录一下

环境介绍

正常来说,一个软件的开发上线的流程大部分都是分为三个环境,依次是开发、测试、上线
1.开发环境(dev):
开发环境是指咱们本地跑的环境
2.测试环境(qa):
​一般是克隆一份生产环境的配置,qa即test
3.生产环境(prod)
​ 正式提供对外服务的,即是真实环境

关于SpringBoot如何通过多个properties实现数据库环境部署时自动切换配置的两种方式,部署时切换方式和打包时Maven控制方式

部署时切换

  1. 新增properties文件

    在application.properties文件的同级目录依次创建application-dev.properties,application-qa.properties,application-pro.properties这三个配置文件,dev、qa和prod分别对应上文“环境介绍”中的三个环境

  2. 配置各个properties文件

    在application.properties中添加配置切换选项,例如切换到dev环境的配置为:Spring.profiles.active=dev

    依次在application-dev.properties,application-qa.properties,application-pro.properties配置相关datasource连接信息

  3. 部署测试环境(jar包部署)

    部署时切换到qa环境

在不同的环境中怎么调用不同的文件
方式一、修改配置文件方式

​在启动服务时,服务器就会通过application.yml文件去调用application-dev.yml文件,也就是说,在开发环境时,只需将application.yml配置文件配置为“dev“,而生产环境时,只需将”dev"改为”prod“就可以了

方式二、命令启动服务,命令中带参数方式(此方式可以没有application.yml文件)

1.第一步:进入到项目目录下,先用maven对项目进行打包,会在target目录下生成项目的jar包
2. 进入target目录,执行命令:java -jar 生成的jar包 --spring.profiles.active=prod
3. 项目就会调用application-prod.yml配置文件,即以生产环境的配置要求启动服务,同理,若是开发环境,只需将prod改为dev即可

SpringBoot最常用的3种读取properties配置文件

  1. 使用@Value注解读取

    读取properties配置文件时,默认读取的时是application.properties

  2. 使用Environment读取
    @RestController
    public class GatewayController {
        @Autowired
        private ConfigBeanValue configBeanValue;
        @Autowired
        private Environment environment;
        @RequestMapping(value = "/gateway")
        public String gateway() {
            return "get properties value by ''@Value'' :" +
                    //1、使用@Value注解读取
                    " name=" + configBeanValue.name +
                    " , age=" + configBeanValue.age +
                    "<p>get properties value by ''Environment'' :" +
                    //2、使用Environment读取
                    " , sex=" + environment.getProperty("demo.sex") +
                    " , address=" + environment.getProperty("demo.address");
        }
    }
    
  3. 使用@ConfigurationProperties注解读取

    ​ 在实际项目中,当项目需要注入的变量值很多时,上述的两种方法工作量会变得比较大,这时候我们通常使用基于类型安全的配置方式,将properties属性和一个Bean关联一起,即使用注解@ConfigurationProperties读取配置文件数据

    ​ 在src\main\resources下新建config.properties配置文件:

    demo.phone=10086
    demo.wife=self
    

    ​ 创建ConfigBeanProp并注入config.properties中的值

    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.PropertySource;
    import org.springframework.stereotype.Component;
    @Component//表示将该类标识为Bean
    @ConfigurationProperties(prefix = "demo")//用于绑定属性,其中prefix表示所绑定的属性的前缀
    @PropertySource(value = "config.properties")//表示配置文件路径
    public class ConfigBeanProp {
        private String phone;
        private String wife;
        public String getPhone() {
            return phone;
        }
        public void setPhone(String phone) {
            this.phone = phone;
        }
        public String getWife() {
            return wife;
        }
        public void setWife(String wife) {
            this.wife = wife;
        }
    }
    

    使用时,先使用@Autowired自动装载ConfigBeanProp,然后再进行取值

    import cn.wbnull.springbootdemo.config.ConfigBeanProp;
    import cn.wbnull.springbootdemo.config.ConfigBeanValue;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.core.env.Environment;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
     
    @RestController
    public class GatewayController {
        @Autowired
        private ConfigBeanValue configBeanValue;
        @Autowired
        private Environment environment;
        @Autowired
        private ConfigBeanProp configBeanProp;
        @RequestMapping(value = "/gateway")
        public String gateway() {
            return "get properties value by ''@Value'' :" +
                    //1、使用@Value注解读取
                    " name=" + configBeanValue.name +
                    " , age=" + configBeanValue.age +
                    "<p>get properties value by ''Environment'' :" +
                    //2、使用Environment读取
                    " sex=" + environment.getProperty("demo.sex") +
                    " , address=" + environment.getProperty("demo.address") +
                    "<p>get properties value by ''@ConfigurationProperties'' :" +
                    //3、使用@ConfigurationProperties注解读取
                    " phone=" + configBeanProp.getPhone() +
                    " , wife=" + configBeanProp.getWife();
        }
    }
    
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值