【配置】如何在打包Spring Boot项目时按需使用日常、测试、预发、正式环境的配置文件

本文主要是介绍【配置】如何在打包Spring Boot项目时按需使用日常、测试、预发、正式环境的配置文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 1. 创建5个配置文件
  • 2. 在pom.xml文件中如下配置
  • 3. 在application.properties中加入环境变量

前言

在我们开发项目的时候,一般有四套环境:日常、测试、预发、正式。日常环境作为我们开发环境;测试环境给测试同学测试功能;预发环境给正式环境发布时提供准备;正式环境则是稳定的生产环境。

这四套环境,数据库、中间件以及其他一些配置多多少少都有一些不同,所以如果我们只用一个application配置文件的话肯定是有问题的,一般的做法是准备4个配置文件,用来区分4个环境,每个文件填入的配置内容互不干扰,然后在项目打包的时候指定文件即可。
如下图:
在这里插入图片描述

具体做法

1. 创建5个配置文件

这5个配置文件分别为:

application.properties
application-daily.properties
application-test.properties
application-pre.properties
application-publish.properties

项目结构如下:
在这里插入图片描述

这里可能有同学有疑惑,既然有了4个环境的配置文件,为啥还要有application.properties这个文件?
这里的application.properties我们可以当做是一个配置文件容器,它可以将其他配置文件的内容加到这里来。还有一个原因就是因为SpringBoot项目启动的时候只认识application.properties文件,不认识其他四个。

2. 在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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>SpringBoot-config</artifactId><version>0.0.1-SNAPSHOT</version><name>SpringBoot-config</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><!-- 添加四个环境的变量,变量名为environment --><profiles><profile><id>daily</id><activation><activeByDefault>true</activeByDefault></activation><properties><environment>daily</environment></properties></profile><profile><id>test</id><properties><environment>test</environment></properties></profile><profile><id>pre</id><properties><environment>pre</environment></properties></profile><profile><id>publish</id><properties><environment>publish</environment></properties></profile></profiles><!-- 指定打包插件,以及解压路径 --><build><finalName>springbootconfig</finalName><resources><resource><!-- 指定配置文件所在的resource目录 --><directory>src/main/resources</directory><includes><include>application.properties</include><include>application-${environment}.properties</include></includes><filtering>true</filtering></resource><resource><directory>src/main/resources</directory><includes><include>logback.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><filtering>false</filtering><excludes><exclude>*.xml</exclude><exclude>*.properties</exclude></excludes></resource></resources><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.1.13.RELEASE</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions><configuration><mainClass>com.example.springbootconfig.SpringBootConfigApplication</mainClass></configuration></plugin><!-- 解压fat jar到target/${project-name}目录 --><plugin><artifactId>maven-antrun-plugin</artifactId><executions><execution><phase>package</phase><configuration><tasks><unzipsrc="${project.build.directory}/${project.build.finalName}.${project.packaging}"dest="${project.build.directory}/springbootconfig"/></tasks></configuration><goals><goal>run</goal></goals></execution></executions></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

这里我的配置有3个部分,直接复制我这个文件的同学要注意了。
第一部分

<!-- 添加四个环境的变量,变量名为environment --><profiles><profile><id>daily</id><activation><activeByDefault>true</activeByDefault></activation><properties><environment>daily</environment></properties></profile><profile><id>test</id><properties><environment>test</environment></properties></profile><profile><id>pre</id><properties><environment>pre</environment></properties></profile><profile><id>publish</id><properties><environment>publish</environment></properties></profile></profiles>

这个部分可以直接复制。这里设置environment变量,它的值一共有4个即daily、test、pre、publish,通过activeByDefault标签设置daily为默认配置。

第二部分

<resources><resource><!-- 指定配置文件所在的resource目录 --><directory>src/main/resources</directory><includes><include>application.properties</include><include>application-${environment}.properties</include></includes><filtering>true</filtering></resource><resource><directory>src/main/resources</directory><includes><include>logback.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><filtering>false</filtering><excludes><exclude>*.xml</exclude><exclude>*.properties</exclude></excludes></resource>
</resources>

这个部分也可以直接复制。这里配置是指定打包那些类型的文件,有时候我们会遇到这样一个问题,发现有些文件不管怎么打包都没法打到jar包里面去,其实就是这个地方没有配置,默认给过滤掉了。

第三部分

<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>utf-8</encoding></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>2.2</version><executions><execution><id>attach-sources</id><goals><goal>jar</goal></goals></execution></executions><configuration><finalName>${project.build.finalName}</finalName></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.1.13.RELEASE</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions><configuration><mainClass>com.example.springbootconfig.SpringBootConfigApplication</mainClass></configuration></plugin>
</plugins>

这个部分要注意后面的mainClass,这里要写你们自己的类路径,不要搞错了。这里指定了打包和解压的插件和文件路径,还有启动类。这里的插件一个都不能少且路径不要配置错误,否则有可能会出现打包失败或者启动时找不到启动类

3. 在application.properties中加入环境变量

application.properties文件中有一个配置:spring.profiles.active。指定它就可以指定当前运行的环境,配置如下:

spring.application.name=SpringBoot-config
server.port=8080
management.server.port=8081
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.html#通过配置的方式激活环境
spring.profiles.active=@environment@ 

如果这个时候你是使用的是idea开发工具,那么在右侧的maven插件中就已经可以看到这几个环境了:
在这里插入图片描述

当然没有idea开发工具的同学也不用担心,我们接下来直接使用打包指令就可以了

日常环境打包指令
mvn clean package -Dmaven.test.skip=true -P=daily

测试环境打包指令
mvn clean package -Dmaven.test.skip=true -P=test

预发环境打包指令
mvn clean package -Dmaven.test.skip=true -P=pre

正式环境打包指令
mvn clean package -Dmaven.test.skip=true -P=publish

打包出来的文件如下:
在这里插入图片描述

这里就会出现你想要指定环境的配置文件,application.properties中的environment变量也会被替换为

pring.application.name=SpringBoot-config
server.port=8080
management.server.port=8081
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.html#环境激活
spring.profiles.active=publish 

当然,平时调试的时候使用默认的日常环境配置就可以了,打包的时候再去指定具体的环境即可。

这篇关于【配置】如何在打包Spring Boot项目时按需使用日常、测试、预发、正式环境的配置文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/369037

相关文章

基于Python编写一个git自动上传的脚本(打包成exe)

《基于Python编写一个git自动上传的脚本(打包成exe)》这篇文章主要为大家详细介绍了如何基于Python编写一个git自动上传的脚本并打包成exe,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录前言效果如下源码实现利用pyinstaller打包成exe利用ResourceHacker修改e

Java中Map的五种遍历方式实现与对比

《Java中Map的五种遍历方式实现与对比》其实Map遍历藏着多种玩法,有的优雅简洁,有的性能拉满,今天咱们盘一盘这些进阶偏基础的遍历方式,告别重复又臃肿的代码,感兴趣的小伙伴可以了解下... 目录一、先搞懂:Map遍历的核心目标二、几种遍历方式的对比1. 传统EntrySet遍历(最通用)2. Lambd

Django调用外部Python程序的完整项目实战

《Django调用外部Python程序的完整项目实战》Django是一个强大的PythonWeb框架,它的设计理念简洁优雅,:本文主要介绍Django调用外部Python程序的完整项目实战,文中通... 目录一、为什么 Django 需要调用外部 python 程序二、三种常见的调用方式方式 1:直接 im

Spring Boot 中 RestTemplate 的核心用法指南

《SpringBoot中RestTemplate的核心用法指南》本文详细介绍了RestTemplate的使用,包括基础用法、进阶配置技巧、实战案例以及最佳实践建议,通过一个腾讯地图路线规划的案... 目录一、环境准备二、基础用法全解析1. GET 请求的三种姿势2. POST 请求深度实践三、进阶配置技巧1

springboot+redis实现订单过期(超时取消)功能的方法详解

《springboot+redis实现订单过期(超时取消)功能的方法详解》在SpringBoot中使用Redis实现订单过期(超时取消)功能,有多种成熟方案,本文为大家整理了几个详细方法,文中的示例代... 目录一、Redis键过期回调方案(推荐)1. 配置Redis监听器2. 监听键过期事件3. Redi

Spring Boot 处理带文件表单的方式汇总

《SpringBoot处理带文件表单的方式汇总》本文详细介绍了六种处理文件上传的方式,包括@RequestParam、@RequestPart、@ModelAttribute、@ModelAttr... 目录方式 1:@RequestParam接收文件后端代码前端代码特点方式 2:@RequestPart接

C#中checked关键字的使用小结

《C#中checked关键字的使用小结》本文主要介绍了C#中checked关键字的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录✅ 为什么需要checked? 问题:整数溢出是“静默China编程”的(默认)checked的三种用

SpringBoot整合Zuul全过程

《SpringBoot整合Zuul全过程》Zuul网关是微服务架构中的重要组件,具备统一入口、鉴权校验、动态路由等功能,它通过配置文件进行灵活的路由和过滤器设置,支持Hystrix进行容错处理,还提供... 目录Zuul网关的作用Zuul网关的应用1、网关访问方式2、网关依赖注入3、网关启动器4、网关全局变

SpringBoot全局异常拦截与自定义错误页面实现过程解读

《SpringBoot全局异常拦截与自定义错误页面实现过程解读》本文介绍了SpringBoot中全局异常拦截与自定义错误页面的实现方法,包括异常的分类、SpringBoot默认异常处理机制、全局异常拦... 目录一、引言二、Spring Boot异常处理基础2.1 异常的分类2.2 Spring Boot默

C#中预处理器指令的使用小结

《C#中预处理器指令的使用小结》本文主要介绍了C#中预处理器指令的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 第 1 名:#if/#else/#elif/#endif✅用途:条件编译(绝对最常用!) 典型场景: 示例