嗯,挺全乎儿的,Spring Boot 多环境配置都在这儿了,你喜欢哪一种呢?

简介: 前言Spring Boot 自带的多环境配置创建不同环境的配置文件指定运行的环境Maven 的多环境配置创建多环境配置文件定义激活的变量pom 文件中定义 profiles资源过滤总结总结

前言

日常开发中至少有三个环境,分别是开发环境(dev),测试环境(test),生产环境(prod)。

不同的环境的各种配置都不相同,比如数据库,端口,IP地址等信息。

那么这么多环境如何区分,如何打包呢?

本篇文章就来介绍一下Spring Boot 中多环境如何配置,如何打包。

Spring Boot 自带的多环境配置

Spring Boot 对多环境整合已经有了很好的支持,能够在打包,运行间自由切换环境。

那么如何配置呢?下面将会逐步介绍。

创建不同环境的配置文件

既然每个环境的配置都不相同,索性将不同环境的配置放在不同的配置文件中,因此需要创建三个不同的配置文件,分别是application-dev.propertiesapplication-test.propertiesapplication-prod.properties

「注意」:配置文件的名称一定要是application-name.properties或者application-name.yml格式。这个name可以自定义,主要用于区分。

此时整个项目中就有四个配置文件,加上application.properties

指定运行的环境

虽然你创建了各个环境的配置文件,但是Spring Boot 仍然不知道你要运行哪个环境,有以下两种方式指定:

配置文件中指定

application.properties或者application.yml文件中指定,内容如下:

# 指定运行环境为测试环境
spring.profiles.active=test

以上配置有什么作用呢?

如果没有指定运行的环境,Spring Boot 默认会加载application.properties文件,而这个的文件又告诉Spring Boot 去找test环境的配置文件。

运行 jar 的时候指定

Spring Boot 内置的环境切换能够在运行Jar包的时候指定环境,命令如下:

java -jar xxx.jar --spring.profiles.active=test

以上命令指定了运行的环境是test,是不是很方便呢?

Maven 的多环境配置

Maven本身也提供了对多环境的支持,不仅仅支持Spring Boot项目,只要是基于Maven的项目都可以配置。

Maven对于多环境的支持在功能方面更加强大,支持JDK版本资源文件操作系统等等因素来选择环境。

如何配置呢?下面逐一介绍。

创建多环境配置文件

创建不同环境的配置文件,分别是application-dev.propertiesapplication-test.propertiesapplication-prod.properties

加上默认的配置文件application.properties同样是四个配置文件。

定义激活的变量

需要将Maven激活的环境作用于Spring Boot,实际还是利用了spring.profiles.active这个属性,只是现在这个属性的取值将是取值于Maven。配置如下:

spring.profiles.active=@profile.active@

profile.active实际上就是一个变量,在maven打包的时候指定的-P test传入的就是值。

pom 文件中定义 profiles

需要在mavenpom.xml文件中定义不同环境的profile,如下:

<!--定义三种开发环境-->
    <profiles>
        <profile>
            <!--不同环境的唯一id-->
            <id>dev</id>
            <activation>
                <!--默认激活开发环境-->
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!--profile.active对应application.yml中的@profile.active@-->
                <profile.active>dev</profile.active>
            </properties>
        </profile>
        <!--测试环境-->
        <profile>
            <id>test</id>
            <properties>
                <profile.active>test</profile.active>
            </properties>
        </profile>
        <!--生产环境-->
        <profile>
            <id>prod</id>
            <properties>
                <profile.active>prod</profile.active>
            </properties>
        </profile>
    </profiles>

标签<profile.active>正是对应着配置文件中的@profile.active@

<activeByDefault>标签指定了默认激活的环境,则是打包的时候不指定-P选项默认选择的环境。

以上配置完成后,将会在IDEA的右侧Maven选项卡中出现以下内容:

1

可以选择打包的环境,然后点击package即可。

或者在项目的根目录下用命令打包,不过需要使用-P指定环境,如下:

mvn clean package package -P test

maven中的profile的激活条件还可以根据jdk操作系统文件存在或者缺失来激活。这些内容都是在<activation>标签中配置,如下:

<!--activation用来指定激活方式,可以根据jdk环境,环境变量,文件的存在或缺失-->
  <activation>
       <!--配置默认激活-->
      <activeByDefault>true</activeByDefault>
      <!--通过jdk版本-->
      <!--当jdk环境版本为1.8时,此profile被激活-->
      <jdk>1.8</jdk>
      <!--当jdk环境版本1.8或以上时,此profile被激活-->
      <jdk>[1.8,)</jdk>
      <!--根据当前操作系统-->
      <os>
        <name>Windows XP</name>
        <family>Windows</family>
        <arch>x86</arch>
        <version>5.1.2600</version>
      </os>
  </activation>

资源过滤

如果你不配置这一步,将会在任何环境下打包都会带上全部的配置文件,但是我们可以配置只保留对应环境下的配置文件,这样安全性更高。

这一步配置很简单,只需要在pom.xml文件中指定<resource>过滤的条件即可,如下:

<build>
  <resources>
  <!--排除配置文件-->
    <resource>
      <directory>src/main/resources</directory>
      <!--先排除所有的配置文件-->
        <excludes>
          <!--使用通配符,当然可以定义多个exclude标签进行排除-->
          <exclude>application*.properties</exclude>
        </excludes>
    </resource>
    <!--根据激活条件引入打包所需的配置和文件-->
    <resource>
      <directory>src/main/resources</directory>
      <!--引入所需环境的配置文件-->
      <filtering>true</filtering>
      <includes>
        <include>application.yml</include>
          <!--根据maven选择环境导入配置文件-->
        <include>application-${profile.active}.yml</include>
      </includes>
    </resource>
  </resources>
</build>

上述配置主要分为两个方面,第一是先排除所有配置文件,第二是根据profile.active动态的引入配置文件。

总结

至此,Maven的多环境打包已经配置完成,相对来说挺简单,既可以在IDEA中选择环境打包,也同样支持命令-P指定环境打包。

总结

本文介绍了Spring Boot 的两种打包方式,每种方式有各自的优缺点,你更喜欢哪种呢?

相关文章
|
JSON Java fastjson
Springboot 最细节全面的接口传参接参介绍,总有你喜欢的一种方式
Springboot 最细节全面的接口传参接参介绍,总有你喜欢的一种方式
1788 0
Springboot 最细节全面的接口传参接参介绍,总有你喜欢的一种方式
|
XML Java 数据格式
【Java框架型项目从入门到装逼】第二节 - Spring框架 AOP的丧心病狂解说,你喜欢露娜的月下无限连吗?
【Java框架型项目从入门到装逼】第二节 - Spring框架 AOP的丧心病狂解说,你喜欢露娜的月下无限连吗?
354 0
|
JSON fastjson Java
SpringBoot换用FastJson:这是你喜欢的乱码~%?…,# *'☆&℃$︿★?
1.What:什么是SpringBoot? SpringBoot Banner SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。
3136 0
|
11月前
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
1402 0
|
12月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
1281 0
|
前端开发 Java 数据库
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——Thymeleaf 介绍
本课介绍Spring Boot集成Thymeleaf模板引擎。Thymeleaf是一款现代服务器端Java模板引擎,支持Web和独立环境,可实现自然模板开发,便于团队协作。与传统JSP不同,Thymeleaf模板可以直接在浏览器中打开,方便前端人员查看静态原型。通过在HTML标签中添加扩展属性(如`th:text`),Thymeleaf能够在服务运行时动态替换内容,展示数据库中的数据,同时兼容静态页面展示,为开发带来灵活性和便利性。
565 0
|
8月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
627 4
|
8月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
1154 3
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
1046 0
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
396 0