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,一经查实,立即删除!

相关文章

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亿用户。又因为微信官方开通了小程序附近五公里展示以及在微信搜一搜增加“小程序”搜索选项…

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&…

IDEA Translation插件安装及设置鼠标悬浮提示的自动翻译

1、安装插件 Translation 2.设置鼠标悬浮提示 3.在代码界面鼠标悬停在方法上 就会自动翻译提示

在虚拟机中ftp服务器的配置,ftp服务器在虚拟机中配置文件

ftp服务器在虚拟机中配置文件 内容精选换一换由于主机中 /etc/ssh/sshd_config 配置文件中对服务器与客户端交互的活动心跳时间做出了限制&#xff0c;所以在一个ansible任务中如果在“规定时间”中主机没有任何响应则ssh服务断开(注&#xff1a;上述“规定时间”是指在/etc/ss…

@PostConstruct注解详解

简介 javaEE5引入了PostConstruct和PreDestroy两个作用于Servlet生命周期的注解&#xff0c;实现Bean初始化之前和销毁之前的自定义操作 使用场景 在项目中主要是在Servlet初始化之前加载一些缓存数据等 API使用说明 PostConstruct 注释用于在依赖关系注入完成之后需要执行…

用户密码到底要怎样存储?

作为互联网公司的信息安全从业人员经常要处理撞库扫号事件&#xff0c;产生撞库扫号的根本原因是一些企业发生了信息泄露事件&#xff0c;且这些泄露数据未加密或者加密方式比较弱&#xff0c;导致黑客可以还原出原始的用户密码。 目前已经曝光的信息泄露事件至少上百起&#…

dateframe取某列数据_Python获取时序数据并进行可视化分析

更多精彩&#xff0c;请点击上方蓝字关注我们&#xff01;1. 准备工作tushare是一个第三方财经数据接口包&#xff0c;需要安装包并完成注册。安装tushare包pip install tushare 为防恶意调用接口数据&#xff0c;官方()需要新用户完成注册、提高积分(例如达到200)、取得访问权…

Shiro 登录认证源码详解

Apache Shiro 是一个强大且灵活的 Java 开源安全框架&#xff0c;拥有登录认证、授权管理、企业级会话管理和加密等功能&#xff0c;相比 Spring Security 来说要更加的简单。 本文主要介绍 Shiro 的登录认证&#xff08;Authentication&#xff09;功能&#xff0c;主要从 Sh…

中3d库后接负载_Nature子刊:近红外光交联水凝胶用于活体生物3D打印

由于打印精度高、速度快&#xff0c;光固化3D打印成为组织再生等医学研究的有利工具&#xff0c;然而由于现在光固化3D打印普遍采用波长较短的光源&#xff0c;对组织损害较大且穿透力不高&#xff0c;这大大限制生物体内3D打印的发展。最近&#xff0c;来自意大利帕多瓦大学的…

怎么看调用的接口_Hadoop RPC调用实例分析

以ClientProtocol接口中的rename RPC调用进行一次实例分析。rename方法在ClientProtocol接口中定义&#xff0c;它的两个参数是String类型的&#xff0c;不能直接通过网络传输。我们看谁实现了ClientProtocol接口并重写rename方法。看到是ClientNamenodeProtocolTranslatorPB这…

父子结构查询_Java面试准备(5)之数据结构与算法——红黑树

欢迎点赞评论关注~~~~~~~如上图&#xff0c;二叉查找树极端情况下可能会变成一个单链表&#xff0c;这种查询时间复杂度就变成O(n)了&#xff0c;红黑树在二叉查找树的基础上进行了自平衡。1.原理分析如上图&#xff0c;红黑树具有以下特征&#xff1a;1. 每个节点要么是黑色&a…

中海达数据怎么转rinex_cors账号网最新实战教程,中海达 F61 Plus RTK连接千寻cors账号的方法...

RTK在工程测量工作中越来越流行&#xff0c;在这股潮流中&#xff0c;中海达品牌的F61 Plus因为融合了中海达多年的成熟建站技术HD-CORS&#xff0c;在工程测量工作中也受到了很大欢迎。它可以配套各种cors账号使用&#xff0c;使用过程中只需一台RTK移动站即可进行数据采集、施…

Shiro之UsernamePasswordTokenRememberMeAuthenticationTokenAuthenticationToken

继承关系 先看一下三者的继承关系&#xff0c;会有一个比较清楚的认识 AuthenticationToken AuthenticationToken 用于收集用户提交的身份&#xff08;如用户名&#xff09;及凭据&#xff08;如密码&#xff09;。Shiro会调用CredentialsMatcher对象的doCredentialsMatch方法对…

华为手机滑动速度设置_华为手机打字速度慢?开启这个设置,一分钟就能打200字...

很多朋友都说自己的打字速度非常慢&#xff01;每次使用手机聊天、记录工作事项大半天还没打一段字来。其实使用华为手机就能非常快速的码字&#xff0c;不管聊天还是工作&#xff0c;使用这个方法&#xff0c;一分钟就能打200字。1.聊天快速打字手机键盘因为体积的原因&#x…

SpringBoot 使用AOP功能

RPC&#xff0c;AOP都会用到代理&#xff0c;代理的技术有jdk的Proxy代理(必须实现接口)&#xff0c;cglib(可以不实现接口&#xff0c;直接实现类)&#xff0c;Javassist(jboss )而Spring boot本身也在方方面面使用了代理技术,在Spring中有两种动态代理方式&#xff0c;分别为…