【配置】如何在打包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 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/135379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

​软考-高级-信息系统项目管理师教程 第四版【第21章-项目管理科学基础-思维导图】​

软考-高级-信息系统项目管理师教程 第四版【第21章-项目管理科学基础-思维导图】 课本里章节里所有蓝色字体的思维导图

【elasticsearch+kibana基于windows docker安装】

创建网络&#xff1a;es和kibana容器互联 docker network create es-net加载镜像 docker pull elasticsearch:7.12.1运行 docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e ES_JAVA_OPTS"-Xms512m -Xmx512m" -v $…

uni-app基于vue实现商城小程序

一、前言 参考“网易严选”小程序 项目采用传统vue项目结构&#xff0c;即uni-app打包和运行成小程序&#xff0c;使用HBuilder开发工具开发项目&#xff0c;通过运行启动“微信开发者工具”完成项目启动。 二、功能效果图 1.首页 2.分类 3.活动 4.我的 5.商品详情 6.购物车…

React中组件之间如何通信?

一、是什么 我们将组件间通信可以拆分为两个词&#xff1a; 组件通信 回顾Vue系列的文章&#xff0c;组件是vue中最强大的功能之一&#xff0c;同样组件化是React的核心思想 相比vue&#xff0c;React的组件更加灵活和多样&#xff0c;按照不同的方式可以分成很多类型的组件…

第五届泰迪杯数据分析技能赛B题源码图片分享

需要B题源码以及第六届带队”指导“请私信本人&#xff0c;团队包含技能赛双一等&#xff0c;数学建模省一&#xff0c;泰迪杯挖掘国一&#xff0c;研究生队友。 去年一等作品可视化图如下&#xff0c;私信获取源码

【Ruoyi管理后台】用户登录强制修改密码

近期有个需求&#xff0c;就是需要调整Ruoyi管理后台&#xff1a;用户如果三个月(长时间)未修改过密码&#xff0c;需要在登录时强制修改密码&#xff0c;否则不能登录系统。 一、后端项目调整 从需求来看&#xff0c;我们需要在用户表增加一个字段&#xff0c;用于标记用户最…

【C语言】动态内存管理

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解动态内存管理&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一. 为什么存在动态内存分配二. 动态内存函数的介绍2.1 malloc和free2.2 calloc2.3 real…

Linux/centos上如何配置管理Web服务器?

Linux/centos上如何配置管理Web服务器&#xff1f; 1 Web简单了解2 关于Apache3 如何安装Apache服务器&#xff1f;3.1 Apache服务安装3.2 httpd服务的基本操作 4 如何配置Apache服务器&#xff1f;4.1 关于httpd.conf配置4.2 常用指令 5 简单实例 1 Web简单了解 Web服务器称为…

OpenGL_Learn08(坐标系统)

目录 1. 概述 2. 局部空间 3. 世界空间 4. 观察空间 5. 剪裁空间 6. 初入3D 7. 3D旋转 1. 概述 OpenGL希望在每次顶点着色器运行后&#xff0c;我们可见的所有顶点都为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说&#xff0c;每个顶点的x&#xff0c;…

FMCW雷达论文速览 | TRS 2023, 基于FMCW雷达的多天线高精度测距算法及性能分析

注1:本文系“最新论文速览”系列之一,致力于简洁清晰地介绍、解读最新的顶会/顶刊论文 TRS 2023 | High Accuracy Multi-antenna Ranging Algorithm and Performance Analysis for FMCW Radar 论文原文:https://ieeexplore.ieee.org/document/10309162 Z. Xu, S. Qi and P. Zh…

SpringBoot定时任务打成jar 引入到新的项目中后并自动执行

一、springBoot开发定时任务 ①&#xff1a;连接数据库实现新增功能 1. 引入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional> </dependency> <dependen…

2023年度API安全状况详解

随着云计算和移动应用的快速发展&#xff0c;API&#xff08;应用程序接口&#xff09;已成为不可或缺的技术组成部分。然而&#xff0c;API的广泛使用也带来了安全风险。本文将探讨2023年的API安全状况&#xff0c;并介绍了一些应对这些安全挑战的最佳实践。 引言 随着全球互联…

深度学习入门-基于Python的理论与实现摘要记录

基本是《深度学习入门-基于Python的理论与实现》的复制粘贴&#xff0c;以作为日后的检索和查询使用 感知机 感知机接收多个输入信号&#xff0c;输出一个信号。 感知机原理 感知机接收多个输入信号&#xff0c;输出一个信号。 图2-1是一个接收两个输入信号的感知机的例子。…

网络工程师回顾学习(第一部分)

根据书本目录&#xff0c;写下需要记忆的地方&#xff1a; 参考之前的笔记&#xff1a; 网络工程师回答问题_one day321的博客-CSDN博客 重构第一部分需要记忆的&#xff1a; 第一章&#xff1a;计算机网络概论 计算机网络的定义和分类&#xff1a;计算机网络是指将地理位…

IPv6详解

目录: 第一部分 IPv6的诞生背景和引起的主要变化 第二部分 IPv6数据报的基本首部和扩展首部 第三部分 IPv6地址 第四部分 IPv4向IPv6过渡 第一部分 IPv6的诞生背景和引起的主要变化 一.IPv6的诞生背景 IPv4存在设计缺陷: IPv4的设计者最初并没有想到该协议会在全球范围内广…

centos7.9 postgresql 16.0 源码安装部署

postgresql 16.0 源码安装部署 环境准备 系统主机名IP地址centos7.9postgres192.168.200.56 软件准备 postgresql-16.0.tar.gz https://ftp.postgresql.org/pub/source/v16.0/postgresql-16.0.tar.gz依赖安装 yum -y install systemd-devel readline readline-devel zlib-devel…

2023辽宁省数学建模B题数据驱动的水下导航适配区分类预测完整原创论文分享(python求解)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了辽宁省数学建模B题完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 B用Python&#xff0b;SPSSPRO求解&…

RabbitMQ 消息中间件

消息中间件 1、简介 消息中间件也可以称消息队列&#xff0c;是指用高效可靠的消息传递机制进行与平台无关的数据交流&#xff0c;并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型&#xff0c;可以在分布式环境下扩展进程的通信。 当下主流的消息中间…

【腾讯云 TDSQL-C Serverless 产品体验】以TDSQL-C Mysql Serverless 作为数据中心爬取豆瓣图书数据

【腾讯云 TDSQL-C Serverless 产品体验】以TDSQL-C Mysql Serverless 作为数据中心爬取豆瓣图书数据 文章目录 【腾讯云 TDSQL-C Serverless 产品体验】以TDSQL-C Mysql Serverless 作为数据中心爬取豆瓣图书数据背景TDSQL-C Serverless Mysql介绍以TDSQL-C Mysql Serverless 作…

记录两个Excel导出出现的问题

问题一&#xff1a;导出数据时&#xff0c;这行代码返回null&#xff0c;导致导出excel失败&#xff1b; Workbook workbook ExcelExportUtil.exportExcel(params, map);解决&#xff1a;排查出来&#xff0c;是因为版本问题&#xff0c;autopoi版本是1.2.1&#xff1b; 升级…