springboot配置多项目下统一切换不同环境变量profile办法

springboot配置多项目下统一切换不同环境变量profile办法

springboot 适合于微服务那种多项目开发,每一个小项目就是一个springboot 项目,比如我们这样:
这里写图片描述

问题发生:

我们知道springboot 项目中的配置文件application.properties ,几乎我们的配置信息都写在了这边,非常方便,但常常我们会多环境应用,比如开发环境测试环境正式环境 等不同的配置信息,前一段时间,对我们公司的一个项目,在多个省进行了部署,我改来改去差点疯了,同事的提醒,也深刻体会到,如果单用一个配置文件,绝对不行。

配置办法:

对于上边的贴出的那个例子,介绍如下:
这里写图片描述
当然springboot 项目默认为jar ,但是有时候我们也会像上边一样,以war 包运行。针对于不同的包类型,我发现配置是不同的。

1、每一个子项目中创建devproduct 等多个不同的配置文件

大家这里可能说是不是太麻烦,每个子项目都要配一个,其实是可以都配置到父pom.xml 里的,只不过我嫌看起来不直观,所以都每个环境都给搞了一个,后边我会写上直接一个配置文件搞定的写法。
如上图所示,在两个子项目springboot-study-restspringboot-study-service 中的resources 下,分别都创建application-dev.propertiesapplication-product.properties 两个文件。
然后在它们原有的application.properties 文件中都填写下边这种配置:

#多环境配置
spring.profiles.active=@activatedProperties@

上边的activatedProperties 会在下边第二步 中提到。
然后对于devproduct 的不同环境下的配置,分别写到对应的配置文件中即可。

2、父pom 添加profiles

首先找到项目的父pom.xml ,如果你单项目,那就找它自己就行了,找到后,加上如下配置:

<profiles><!-- 默认开发环境 --><profile><!--id唯一,不能有重复的--><id>dev</id><!--配置--><properties><!-- 环境标识,需要与配置文件的名称相对应 --><activatedProperties>dev</activatedProperties></properties><activation><!-- 默认环境,如果设置了这个,则项目运行默认使用这个profile的配置 --><activeByDefault>true</activeByDefault></activation></profile><!-- 生产环境 --><profile><id>product</id><properties><activatedProperties>product</activatedProperties>                </properties></profile></profiles>

上边中你会看到在第一步 中配置的那个activatedProperties,它们是一一对应的,并且两边添加上@@ 即可。
上边这段,我是放置在父pom.xml 的下边这个位置,位置无所谓的:
这里写图片描述

3、war 包的,子pom 添加resources 如下:
 <build><finalName>springboot-study-rest</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin></plugins><resources><!-- 打包时将jsp文件拷贝到META-INF目录下--><resource><!-- 指定resources插件处理哪个目录下的资源文件 --><directory>src/main/webapp</directory><!--注意此次必须要放在此目录下才能被访问到--><targetPath>META-INF/resources</targetPath><includes><include>**/**</include></includes></resource><resource><directory>src/main/resources</directory><includes><include>**/**</include></includes><!--不加这个就会报错,对于多配置文件的这种,必须设成true--><filtering>true</filtering></resource></resources></build>

上边这段是我把整个pom.xml 里`` 标签中的东西贴上了,大家可以参照,这里只说resources ,注意下边有一个:

<filtering>true</filtering>

一定要设置成true ,否则项目运行的时候,application.properties 文件中的引用变量值变不过来。

3、jar 包的,子pom 中不需要加resource

我亲自试过,下边是我的jar包中,pom.xml 中的`` 标签内容:

<build><plugins><!--springboot项目打包必须要带的--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>1.5.1.RELEASE</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><!--<plugin>--><!--<groupId>org.apache.maven.plugins</groupId>--><!--<artifactId>maven-compiler-plugin</artifactId>--><!--<version>3.3</version>--><!--<configuration>--><!--<source>1.8</source>--><!--<target>1.8</target>--><!--</configuration>--><!--</plugin>--><!--<plugin>--><!--<groupId>org.apache.maven.plugins</groupId>--><!--<artifactId>maven-war-plugin</artifactId>--><!--<version>2.6</version>--><!--<configuration>--><!--<failOnMissingWebXml>false</failOnMissingWebXml>--><!--</configuration>--><!--</plugin>--></plugins><!--<resources>--><!--<resource>--><!--<directory>src/main/resources</directory>--><!--<includes>--><!--<include>application.properties</include>--><!--</includes>--><!--<filtering>true</filtering>--><!--</resource>--><!--<resource>--><!--<directory>src/main/resources</directory>--><!--<includes>--><!--<include>**/*</include>--><!--</includes>--><!--</resource>--><!--</resources>-->
</build>

上边我已经把其他东西都注释掉了,只留下一个plugins 标签。编译之后,就可以替换成功。而war 包却不能那样,必须要有resources 标签,并且对其中的filter 设置成true才可以。

到此,可以直接运行项目,如果都出现下边这行,即配置完成。
这里写图片描述
如果上图的位置中还是@activatedProperties@ 说明没有成功。

下边说一下一个配置文件搞定的办法

其实通过以上的配置,大家估计也看出来了,如何只使用一个配置文件,配置除去第一步 ,其他,跟上边是一样的,只不过需要把你对于不同环境的配置信息,都移到了父pom.xml 中即可。

1、配置信息写到父pom.xml
<profiles><!-- 默认开发环境 --><profile><!--id唯一,不能有重复的--><id>dev</id><!--配置--><properties><!-- 环境标识,需要与配置文件的名称相对应 --><restport>8076</restport><serviceport>8089</serviceport><zkHost>http://localhost:8983/solr</zkHost><driverclass>oracle.jdbc.driver.OracleDriver</driverclass></properties><activation><!-- 默认环境,如果设置了这个,则项目运行默认使用这个profile的配置 --><activeByDefault>true</activeByDefault></activation></profile><!-- 生产环境 --><profile><id>product</id><properties><restport>30000</restport><serviceport>30001</serviceport><zkHost>http://113.11.11.11:8983/solr</zkHost><driverclass>com.microsoft.sqlserver.jdbc.SQLServerDriver</driverclass></properties></profile></profiles>

即把我们的配置,都写到了每一个profiles下的properties 中了。

2、application.properties 文件引用

springboot-study-rest 项目中的application.properties 文件中如下:

server.port=@restport@
spring.data.solr.zk-host=@zkHost@

springboot-study-service项目中的application.properties 文件中如下:

server.port=@serviceport@
spring.datasource.driver-class-name=@driverclass@
3、配置完成后,运行项目。

配置完成后,运行项目,因为现在没有了devproductproperties 文件了,那运行后的日志会是这样的,即default ,没关系,意思就是说使用的是application.properties 文件中的内容。
这里写图片描述

4、其他配置参照上边那种配置方法即可

对于其他的关于各个项目的pom.xml 配置,就参照上边写的吧,都一样了。
这样看来,下边的这种配置方式更加简洁。可能大部分人会更偏向于接受后边的这种配置。

配置失败的原因分析

可能我写的不够详细,大家在配置中会遇到失败的问题,我觉得最可能引起错误的原因主要有下边这几个:
1、maven 的配置没有更新,因为我们改了些配置,即需要重新更新下maven 配置即可。
2、项目未编译 ,如果你配置正确,还没有启动成功,十之八九的原因在这里,你只需要对项目重新clean install 即可。即把旧的class文件及配置全部清除掉,再重新编译打包即可。
3、配置对应的名称写错,不对应 ,即类似于我们在properties 文件中的引用,@@ 之间的内容必须与profile 中的properties 标签中的名字对应,如果错了就替换不成功的,如果没有那肯定也是替换不了的。
4、war 包中的resources 下的filter 未设置成true

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

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

相关文章

python语言运算符有三种_《Python语言程序设计》 —2.3 运算符

2.3 运算符在计算机中&#xff0c;数据处理实际上就是对数据按照一定的规则进行运算。在已经掌握Python基本数据类型的基础上&#xff0c;我们来看一下对这些类型的数据可以做哪些运算。这里介绍数据处理中一些常用运算符的作用和使用方法。2.3.1 占位运算符占位运算符类似于…

springboot 关于 Class path contains multiple SLF4J bindings.警告的解决

springboot 关于 Class path contains multiple SLF4J bindings.警告的解决 有一次配置好springboot项目启动后&#xff0c;忽然发现有下边的警告&#xff1a; SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/E:/mavenJarOnline/c…

c# 计算机ip,C# 获取电脑的IP,网关,MAC,计算机名。。

【实例简介】【实例截图】【核心代码】using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Net;using System.Net.Sockets;us…

wxml 判断 小程序_如何判断小程序外包公司是否靠谱

微信小程序依附微信App&#xff0c;由于其无需下载&#xff0c;无需安装&#xff0c;无需注册&#xff0c;直接用微信授权登录&#xff0c;不占内存等优势在短短2年多的时间斩获超过10亿用户。又因为微信官方开通了小程序附近五公里展示以及在微信搜一搜增加“小程序”搜索选项…

springboot配置启动后自动打开浏览器访问项目

springboot配置项目启动后自动打开浏览器访问项目 有时候在单机部署&#xff0c;或者项目没有在IDea 开发工具中运行&#xff08;idea可以自动打开tomcat项目&#xff09;&#xff0c;需要项目启动后自动打开浏览器访问项目&#xff0c;配置方法很简单。 一、具体步骤 所用到…

idea install 失败_idea maven install 卡住,无报错排查。

今天使用idea打包&#xff0c;执行install&#xff0c;看控制台日志&#xff0c;卡主了(意思是日志不继续在控制台输打印了&#xff0c;卡主了&#xff0c;也看不到错误)&#xff0c;也没有报错&#xff0c;然后进行排查。进入dos命令&#xff0c;进入到项目的根目录&#xff0…

研祥计算机U盘启动,研华工控机U盘启动设置

研华工控机U盘启动设置_计算机硬件及网络_IT/计算机_专业资料。研华工控机U盘启动研华IPC-610工控机安装的是XP版本&#xff0c;有时安装控制软件不满意时需要卸载软件&#xff0c;往往卸载的不彻底&#xff0c;使得安装无法顺利进行&#xff0c;这样就需要恢复系 统到开始比较…

ladder怎么读_ladder 是什么意思_ladder 的翻译_音标_读音_用法_例句_爱词霸在线词典...

全部四级六级Oh… Why dont you use the ladder?出自-2014年6月听力原文Use a ladder to help her reach the tea出自-2014年6月听力原文It provides a ladder of opportunity for the wealthy.出自-2016年6月阅读原文Americas education system has become less a ladder of …

服务器整机性能测试实验室,分析测试中心-重点实验室

1、XPS(可做刻蚀XPS&#xff1b;UPS价带谱)2、TEM(普通形貌、高分辨透射电镜&#xff1b;可测磁性样品TEM)3、SEM(场发射扫描电镜&#xff1b;可测磁性样品SEM&#xff0c;可喷金)4、BET(可测介孔、微孔材料比表面、孔容及孔径分布等全套分析&#xff0c;也可做水蒸汽、有机气体…

springboot中注入FilterRegistrationBean不生效原因

springboot中注入FilterRegistrationBean不生效原因 回顾 最近自定义了两个过滤器&#xff0c;接口请求返回加密和sql注入处理过滤器&#xff0c;因为在封装一些工具包&#xff0c;我在单独调好之后&#xff0c;就打算做成一个注解&#xff0c;像springboot启动类上加EnableS…

mfc 固定编辑框输入上限和下限_MFC中编辑框数字限制范围

为编辑框添加 int变量的时候下面有2空可以填写最大值与最小值&#xff1b;或者自己添加代码DDV_MinMaxInt(pDX, m_nPort, 1, 65535);但是这个不一定要工作。解决方法&#xff1a;给编辑框添加一个失去焦点(killfocus)的消息&#xff0c;在里面UpdateData(TRUE)一下就搞定。原因…

服务器虚拟机密度,服务器整合:虚拟机密度大未必是好事

虚拟化技术已经给数据中心带来颠覆性变革&#xff0c;但极力压缩服务器虚拟化主机数量、过度提高虚拟机密度的做法并非最佳选择。在考虑虚拟化环境时&#xff0c;时代特色造就了一种新趋势&#xff0c;即将极为丰富的资源赋予一套单独的物理服务器、并以此为基础支持海量虚拟机…

jps命令原理

一、说明 jps位于jdk的bin目录下&#xff0c;其作用是显示当前系统的java进程情况&#xff0c;及其id号。 jps相当于Solaris进程工具ps。不象”pgrep java”或”ps -ef grep java”&#xff0c;jps并不使用应用程序名来查找JVM实例。因此&#xff0c;它查找所有的Java应用程序…

make *** 没有指明目标并且找不到 makefile。 停止。_Makefile目标文件搜索(VPATH和vpath)...

我们都知道一个工程文件中的源文件有很多&#xff0c;并且存放的位置可能不相同(工程中的文件会被放到不同的目录下)&#xff0c;所以按照之前的方式去编写 Makefile 会有问题。我们之前列举的例子&#xff0c;所有的源文件基本上都是存放在与 Makefile 相同的目录下。只要依赖…

电脑设置访问苹果服务器未响应,苹果连接电脑没反应,教您苹果连接电脑没反应怎么解决...

但只要是电子设备&#xff0c;那就一定会出现问题&#xff0c;所以苹果手机也不能例外。不过小编我有想好解决的方法&#xff0c;并且我已经将解决苹果手机连接电脑没反应的方法写在了文章的后面&#xff0c;小伙伴们往下看即可。苹果手机作为手机品牌界的翘楚&#xff0c;它一…

Linux下netstat命令详解

一、介绍 Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具&#xff0c;它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据&#xff0c;一般用于检验本机各端口的网络连接情况。 二、输出…

hbase可视化工具_做数据可视化,三大热门BI工具试用总结

什么BI分析工具好用&#xff1f;今天通过3款BI产品Power BI、FineBI、亿信ABI为范例&#xff0c;进行对比分析。一、产品背景Power BI是微软的&#xff0c;14年15年开始初见苗头&#xff0c;之前主要是基于Excel的高级功能&#xff0c;包括Power Query&#xff0c;Power Pivot&…

Navicat导入数据库数据结构sql报错datetime(0)

错误发生情况&#xff1a; 将数据库从mysql5.7导出为sql&#xff0c;在mysql5.5上进行导入&#xff0c;报sql语句错误&#xff1a;datetime(0)… 错误发生原因 mysql5.7和mysql5.5的datetime、timestamp不兼容 mysql5.7导出的格式为 : datetime(0)&#xff0c;mysql5.5则无法…

文件服务器ping延时大,windowns 2008 ping 127.0.0.1延迟大的解决方法。

以查清是windowns 2008的BUG。文章编号: 979612 – 查看本文应用于的产品传输控制协议 (TCP) 环回滞后时间和在 Windows Server 2008、 Windows Server 2008 R2、 Windows Vista 和 Windows 7 中的用户数据报协议 (UDP) 滞后时间是比 TCP 环回延迟和 Windows Server 2003 中的 …

眉骨高者为大贵之相_男人此处“高大”,大富大贵,前途不可限量!!

原标题&#xff1a;男人此处“高大”&#xff0c;大富大贵&#xff0c;前途不可限量&#xff01;&#xff01;文/一得老师DC在沉寂多年后&#xff0c;终于崛起了&#xff01;三天破6.5亿&#xff0c;两周破16亿&#xff1b;《海王》爆了&#xff01;海王饰演者杰森莫玛&#xf…