springboot多环境进行动态配置的方法

目录
  • 一、如何配置多环境
  • 二、生效多环境的多种方式
    • 2.1、spring.config.name
    • 2.2、spring.profiles.active
    • 2.3、pom中<profiles>标签
  • 三、总结

在平时的开发中,经常会有多个环境,如何管理多个环境中的配置呐?一个是我们本地的开发环境,可以称为dev,一个是测试环境,我们称为test,最后还要有生产环境,称为prod。每个环境的配置都是不一样的,如何做到快捷方便的使用各自环境的配置绝对是开发中需要着重考虑的。

一、如何配置多环境

在springboot中有默认的配置文件application.properties/application.yml文件,前面几篇分享中一直都是以application.properties文件为例,继续延用该习惯,且application.properties文件的优先级高于application.yml文件。

在resources目录下新建application-dev.properties、application-test.properties、application-prod.properties三个配置文件,注意application.properties文件一定要存在,因为它是默认的配置文件。思考下如果没有application.properties文件,有什么方法可以实现不同环境的配置文件切换,答案是前边说的“spring.config.name”和“spring.config.location”这两个属性,不同环境配置不同的文件名即可。继续看三个配置文件,

application-dev.properties

server.port=9091

application-test.properties

server.port=9092

application-prod.properties

server.port=9093

另外,在application.properties的配置如下,新加了“spring.profiles.active=test”配置,

server.port=9090spring.profiles.active=test

看下启动效果,

可以看到这样就可以实现多环境的动态切换,只需要修改application.properites文件中的“spring.profiles.active”的值即可,注意配置文件需满足application-${profiles}.properties/yml的格式,${profiles}=dev/test/prod/dev3.....

二、生效多环境的多种方式

上面,了解了如何配置多个环境的配置,下面看下如何动态使用。除了上面提到的“spring.profiles.active”还有很多意想不到的。

2.1、spring.config.name

上面也提到可以使用"spring.config.name"属性来决定使用哪个配置文件,“spring.config.name”可以配置在JVM参数和环境变量处,且JVM参数的优先级大于环境变量的。下面尝试下,直接配置在JVM参数处,演示下效果,

这里配置“-Dspring.config.name=application-prod”也就是使用application-prod.properties文件,那么这里的端口肯定是“9093”,看下启动日志

在不同环境下的多个配置文件,可以使用“spring.config.name”属性来指定使用哪个环境的文件。不过大多数情况下不建议使用该方式。

2.2、spring.profiles.active

在上面也提到了该属性“spring.profiles.active”注意该属性和“spring.config.name”的配置值是有区别的,“spring.profiles.active”配置的是application-dev.properties中的“dev“,而“spring.config.name”则配置的是”application-dev“。”spring.profiles.active“不仅可以配置在application.properites文件中,还可以配置在JVM变量和环境变量中,下面看下在配置文件和JVM变量中的优先级,

在application.properties文件中配置”spring.profiles.active=test“,

在JVM变量中配置”spring.profiles.active=prod“,

看下启动日志,

从上图,可以知道JVM变量的优先级大于application.properties中的配置,也就是说JVM中的”spring.profiles.active“的值会覆盖application.properties中的”spring.profiles.active“中的值。

我们上面说到的都是需要在启动的时候配置参数,那么有没有一种方式可以把配置文件打包在jar包里,在启动的时候不需要配置参数,直接执行jar即可。下面的这种方式或许可以实现哦。

2.3、pom中<profiles>标签

可以结合maven中的<profiles>标签动态切换多环境的配置文件,由于这里不再使用”spring.config.name“及”spring.profiles.active“等属性,所以springboot默认读取的配置文件依然是”application.properties“文件,既然多环境下都是该文件,那如何做区分呐,看下图,

没错,通过不同的文件夹来区分不同的环境,每个文件夹下的配置文件的内容分别是dev(9091)、test(9092)、prod(9093),那么要如何加载不同的文件,这里要结合pom.xml文件,

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>springTemplate</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.3.3.RELEASE</version>
        </dependency>
    </dependencies>
    <profiles>
        <!--dev环境-->
        <profile>
            <id>dev</id>
            <properties>
                <profiles.active>dev</profiles.active>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <!--test环境-->
        <profile>
            <id>test</id>
            <properties>
                <profiles.active>test</profiles.active>
            </properties>
        </profile>
        <!--prod环境-->
        <profile>
            <id>prod</id>
            <properties>
                <profiles.active>prod</profiles.active>
            </properties>
        </profile>
    </profiles>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources/${profiles.active}</directory>
            </resource>
        </resources>
    </build>
</project>

在pom.xml文件中加入了上面的配置,idea的”maven“界面,发生了下面的变化,默认是上面配置的”dev“,

看下选择了”dev“,服务的启动日志,

从服务启动日志可以看到在端口”9091“启动,也就是使用的是test的配置文件。注意,修改了下图中的值后,一定要先执行mvn clean,然后执行mvn compie,最后再启动项目,

使用这样的方式,在打包的时候就可以根据不同的环境选择不同的profile,每个环境的包的配置文件是不一样的。

三、总结

本文主要分享了如何在springboot的项目中使用多环境配置,重点是”spring.profiles.active“属性,

1、使用”spring.profiles.actvie“属性可以指定配置文件,要指定的文件需满足application-${profiles}.properties/yml的格式,${profiles}可以是dev、test、prod等代表不同环境的值;

2、不同环境配置不同文件,可使用"spring.profiles.active"和”spring.config.name“属性,针对”spring.profiles.active“可以配置在application.properties也可以配置在JVM中,JVM参数的优先级大于application.properties文件。其实,springboot项目中application.properties文件中可配置的属性都可以通过JVM/环境变量的方式配置;

3、多环境打包,可以使用pom中的<profiles>标签,不同环境打包各自的配置文件;

到此这篇关于springboot多环境下如何进行动态配置的文章就介绍到这了,更多相关springboot多环境动态配置内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • springboot多环境(dev、test、prod)配置详解

    我们在开发应用的时候,通常同一套程序会被应用和安装到几个不同的环境中,比如开发.测试.生产等. 其中每个环境的数据库地址.服务器端口等配置都不同.如果在为不同环境打包时都要频繁的修改配置文件,那必将是个非常繁琐的且容易出错的事情. 对于多环境的配置,各种项目构建工具或是架构的基本思路是一样的,通过配置多份不同的环境配置文件,在通过打包命令指定需要打包的内容之后 进行区分打包,spring boot也不列外.或者说实现起来更加简单. propertiest配置格式 在Spring Boot中多环境

  • springboot多模块多环境配置文件问题(动态配置生产和开发环境)

    第一种情况: spring.profiles.active=环境变量 配置两个环境的,可根据实际需要增加环境模式(开发环境dev,测试环境test,回归坏境retu,预生产环境pre,生产环境prod,等等) dev代表开发环境: prod代表生产环境 pom.xml里面配置profiles: <profiles> <profile> <id>dev</id> <activation> <!-- 默认激活--> <activeB

  • springboot 多环境配置 yml文件版的实现方法

    关于 dev.sit.uat.prod多环境切换的配置 最近小伙伴跟杨洋我聊到了多环境配置的问题,网上的大部分教程都是copy的,很多文章根本就没法用,小伙伴很苦恼啊,于是心(yu)地(shu)善(lin)良(feng)的杨洋回去写了个demo给了小伙 , 那么这边文章呢,正好给大家讲解下关于springboot 的多环境配置 科普时间:  dev.sit.uat.prod是什么呢? 首先给刚接触的小伙伴们科普下含义 dev--本地开发环境: sit--测试环境: uat--准生产环境: pro

  • springboot 多环境配置教程

    在上一课中我们通过idea工具没有做任何配置就构建了一个springboot项目,并且已经成功启动了,但我们都很清楚这些都远远不能达到我们实际项目的需求,比如我们要引入我们自己的redis配置.mysql配置等,应该如何处理呢?在spring mvc中我们都是通过spring.xml相关文件配置,在springboot中这些都已经不存在了,我们应该怎样配置呢?别急,马上为大家揭晓谜底,跟着我一起来吧! NO1.我们在做项目的时候是不是都会区分很多环境呢?比如开发环境.测试环境.生产环境等,那么第

  • springboot多环境配置方案(不用5分钟)

    一 前言 本篇文章的主题是在springboot中写多个配置文件,指定让个配置文件生效,以便于达到在开发环境,测试环境,线上环境根据不同的配置灵活应用:读完本篇你将获得,学会springboot的多环境配置:学会使用idea配置虚拟机参数启动不同的配置文件:学会使用jar包运行并且指定不同的配置文件等: 二 激活方式一 spring框架内部提供了2中方式用于加载YAML文档,以供启动时读取配置文件:YamlPropertiesFactoryBean 会 加载 YAML 变为 Properties

  • springboot多环境进行动态配置的方法

    目录 一.如何配置多环境 二.生效多环境的多种方式 2.1.spring.config.name 2.2.spring.profiles.active 2.3.pom中<profiles>标签 三.总结 在平时的开发中,经常会有多个环境,如何管理多个环境中的配置呐?一个是我们本地的开发环境,可以称为dev,一个是测试环境,我们称为test,最后还要有生产环境,称为prod.每个环境的配置都是不一样的,如何做到快捷方便的使用各自环境的配置绝对是开发中需要着重考虑的. 一.如何配置多环境 在spr

  • 详解SpringBoot配置文件启动时动态配置参数方法

    序言 当我们要同时启用多个项目而又要使用不同端口或者变换配置属性时,我们可以在配置文件中设置${变量名}的变量来获取启动时传入的参数,从而实现了动态配置参数,使启用项目更加灵活 例子 server: port: ${PORT:50101} #服务端口 spring: application: name: xc‐govern‐center #指定服务名 eureka: client: registerWithEureka: true #服务注册,是否将自己注册到Eureka服务中 fetchReg

  • springboot集成druid连接池配置的方法

    在开发项目中如果数据库选型为mysql,很大概率下连接池会使用druid 这里介绍springboot集成durid springboot : 2.1.9 druid : 1.1.10 案例地址 github地址 springboot集成druid配置 需要引入的pom <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactI

  • springboot整合Quartz实现动态配置定时任务的方法

    前言 在我们日常的开发中,很多时候,定时任务都不是写死的,而是写到数据库中,从而实现定时任务的动态配置,下面就通过一个简单的示例,来实现这个功能. 一.新建一个springboot工程,并添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency

  • Quartz实现JAVA定时任务的动态配置的方法

    先说点无关本文的问题,这段时间特别的不爽,可能有些同学也遇到过.其实也可以说是小事一桩,但感觉也是不容忽视的.我刚毕业时的公司,每个人每次提交代码都有着严格的规范,像table和space的缩进都有严格的要求,可以说你不遵守开发规范就相当于线上bug问题,还是比较严重的.现在发现外面的公司真的是没那么重视这个不重要却又特别重要的问题啊,啊啊啊啊啊啊!!! 什么是动态配置定时任务? 回归正题,说下这次主题,动态配置.没接触过定时任务的同学可以先看下此篇:JAVA定时任务实现的几种方式 定时任务实现

  • Springboot使用docker-compose实现动态配置过程

    目录 使用docker-compose实现动态配置 例如 如图所示 总结 使用docker-compose实现动态配置 Springboot应用在打包的时候我们希望可以在项目启动的时候可以修改application.property或者yml中的配置:而不是在打包docker镜像的时候这个值确定后面不可以修改,这个时候可以通过yml提供的环境变量的功能来实现这个需求: 在yml文件中,通过${Envirment_variable}的方式可以获取系统环境变量中的值:于是可以通过把环境变量配置在do

  • 使用springboot+druid双数据源动态配置操作

    目录 一.yml配置 二.动态切换数据源配置文件 1.数据源db1 2.数据源db2 三.多数据源的mapper包最好是分开 四.代码中调用 总结 进行动态切换,需要在类里面配置,顺便解决mybatis-plus自带代码无法使用问题,直接上代码: 一.yml配置 数据源可以都是oracle的也可以一个是oracle一个是mysql的. spring: datasource: druid: db-type: com.alibaba.druid.pool.DruidDataSource #多数据源1

  • springboot 文件上传大小配置的方法

    springboot上传文件大小的配置我这里记录两种,一种是设置在配置文件里只有两行代码,一种是加个Bean 首先第一种: application.properties中添加 spring.http.multipart.maxFileSize=10Mb spring.http.multipart.maxRequestSize=10Mb maxFileSize 是单个文件大小 maxRequestSize是设置总上传的数据大小 这就可以了. 根据自己需求定义吧,Mb和Kb都可以,大小写也都随意,L

  • SpringBoot实现MapperScan添加动态配置(占位符)

    目录 MapperScan添加动态配置(占位符) MapperScannerRegistrard的核心代码如下 从上面代码中可以看出 关于@MapperScan配置 问题 解决方案 MapperScan添加动态配置(占位符) 在对Mybatis自动扫描配置中,使用注解配置时,@MapperScan中的配置,通常配置如下: @MapperScan(basePackages = {"com.aa.**.mapper","com.bb.**.mapper"}, sqlSe

  • 小程序页面动态配置实现方法

    小程序可以根据管理后台配置动态更新展示内容,如实现下面新鲜事栏目图片的来源的可配置,点击跳转url的可配置. 实现方案 1后端创建一个map结构的数据表,表结构如下: 2 管理后台根据不同业务设定不同的key和value,更新数据库 如key:ad1url value:a.png 如果需要更新页面图片,只需更新ad1url对应的value 3 小程序根据对应业务key获取对应的配置项,更新页面显示 技术栈 后端接口服务:SpringBoot Mybatis MySql 管理后台:vue 前端:小

随机推荐