若依Cloud项目配合nacos进行多环境profile的配置

1、前言

最近做的用若依改造的一个项目要把里面的配置挪到nacos的配置中心,之前用过apollo做配置中心,nacos用的很少,而且是自己从头做的那种,而自己想要实现的效果是本地启动和到测试,预发,生产环境启动的时候,都不需要修改任何代码,直接部署就行,自己参考多个博客,和自己的琢磨,实现了自己想要的效果

2、参考文章

1)若依官网:http://doc.ruoyi.vip/ruoyi-cloud/cloud/config.html (感觉参考价值不是很大)
2)SpringCloud 配合Nacos进行Profile多环境配置详解:https://blog.csdn.net/weixin_40579395/article/details/126988951

3、版本和依赖说明

1)版本:
若依的版本是:3.8.5
nacos服务端的版本是:2.2.8
nacos客户端的版本是:2.1.0
2)nacos的依赖

<!-- nacos服务注册与发现 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos配置中心 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

4、配置成果

这个版本的springcloud是需要用到bootstrap.yml和application.yml,所以项目里面就只需要留bootstrap.yml,之前自己还傻傻的在本地留了application-dev.yml的配置,后面发现注释掉这个文件里的内容也可以正常运行,其实这主要是自己对nacos的配置中心原理不熟悉导致的,配置完成之后的成果是这样的:
1)nacos配置中心
在这里插入图片描述
2)工程里的配置
在这里插入图片描述

5、配置步骤

1)改造bootstrap.yml

# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 8080
  servlet:
    # 应用的访问路径
    context-path: /
  tomcat:
    # tomcat的URI编码
    uri-encoding: UTF-8
    # 连接数满后的排队数,默认为100
    accept-count: 1000
    threads:
      # tomcat最大线程数,默认为200
      max: 800
      # Tomcat启动初始化的线程数,默认值10
      min-spare: 100

spring:
  application:
    name: ruoyi-system-svc
  profiles:
    #采用灵活的参数配置 在pom.xml中定义不同的环境 打包时指定配置文件打包
    active: @spring.profiles.active@

  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: ${common.nacos.config.server}
        # 命名空间
        namespace: ${common.nacos.config.namespace:public}
        username: ${common.nacos.config.username:nacos}
        password: ${common.nacos.config.password:ncs-nacos}
      config:
        # 配置中心地址
        server-addr: ${common.nacos.config.server}
        namespace: ${common.nacos.config.namespace:public}
        username: ${common.nacos.config.username:nacos}
        password: ${common.nacos.config.password:ncs-nacos}
        # 配置文件格式
        file-extension: yml
        # 共享配置
        shared-configs:
          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

这个配置可以复制直接食用~~

2)多环境profile配置

多环境bootstrap的文件格式:

bootstrap-{profile}.yml

profile一般为各个环境的命名,比如开发(dev)、测试(test)、生产 (prod)等等,这里的环境命名需要和放在pom中的profile的spring.profiles.active属性值保持一致即可。
每个bootstrap-{profile}.yml的文件内容都只有nacos的配置,由于我目前只有一个nacos服务端,所以都是一样,大家到了不同的环境有了不同的nacos服务端的信息之后就配置成对应环境的nacos地址即可,我这里用dev的命名空间来区分各个环境,前提需要在nacos中创建对应的命名空间:
在这里插入图片描述

2.1) bootstrap-dev.yml

common:
  nacos:
    config:
      #Nacos 服务地址
      server: 127.0.0.1:8848
      username: nacos
      password: nacos
      #Nacos 命名空间
      namespace: dev

2.3) bootstrap-test.yml

common:
  nacos:
    config:
      #Nacos 服务地址
      server: 127.0.0.1:8848
      username: nacos
      password: nacos
      #Nacos 命名空间
      namespace: test

2.3) bootstrap-prod.yml

common:
  nacos:
    config:
      #Nacos 服务地址
      server: 127.0.0.1:8848
      username: nacos
      password: nacos
      #Nacos 命名空间
      namespace: prod

3)pom文件增加多环境配置

<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <!--默认激活-->
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <spring.profiles.active>dev</spring.profiles.active>
        </properties>
    </profile>

    <!--测试环境-->
    <profile>
        <id>test</id>
        <properties>
            <spring.profiles.active>test</spring.profiles.active>
        </properties>
    </profile>

    <!--生产环境-->
    <profile>
        <id>prod</id>
        <properties>
            <spring.profiles.active>prod</spring.profiles.active>
        </properties>
    </profile>
</profiles>

<build>
    <!-- 配合profiles中配置的环境文件使用,不配置项目启动报错 -->
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <!-- 处理文件时替换文件中的变量 -->
            <filtering>true</filtering>
            <excludes>
                <!-- 打包时排除文件-->
                <exclude>bootstrap.yml</exclude>
                <exclude>bootstrap-dev.yml</exclude>
                <exclude>bootstrap-test.yml</exclude>
                <exclude>bootstrap-prod.yml</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <!-- 打包时所包含得文件 -->
            <includes>
                <include>bootstrap.yml</include>
                <include>bootstrap-${spring.profiles.active}.yml</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <version>2.8.2</version>
        </plugin>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.1.1.RELEASE</version>
            <configuration>
                <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>   
            <groupId>org.apache.maven.plugins</groupId>   
            <artifactId>maven-war-plugin</artifactId>   
            <version>3.1.0</version>   
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
                <warName>${project.artifactId}</warName>
            </configuration>   
       </plugin>   
    </plugins>
    <finalName>${project.artifactId}</finalName>
</build>

说明:上面这段build标签中的最后打包的finalName的值取的是这个pom中定义的值:
在这里插入图片描述
这样配置之后,本地的idea就可以直接启动了,那到了测试环境和生产环境怎么办,怎么激活环境呢,这个时候就需要在打包和启动的命令中增加参数的配置

  • 打包:

mvn -B clean package -P test -Dmaven.test.skip=true -Dautoconfig.skip

说明:-P 后面的test就是指定了打包的环境是test环境

  • 启动:

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

说明:spring.profiles.active=test就是指定了启动时读取test环境的配置,也就是读取bootstrap-test.yml的配置,这个时候,nacos也会读取test的命名空间里的yml配置文件。

到这里就配置完成了,后面再改配置的话,无论是开发环境,测试环境还是生产环境,都只需要修改nacos中对应命名空间里的配置了。快来开始快乐的配置吧!

-----------------你知道的越多,不知道的越多!----------------------

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在Linux Archcraft中配置SSH服务并结合内网穿透实现远程连接

文章目录 1. 本地SSH连接测试2. Archcraft安装Cpolar3. 配置 SSH公网地址4. 公网远程SSH连接小结 5. 固定SSH公网地址6. SSH固定地址连接 Archcraft是一个基于Arch Linux的Linux发行版&#xff0c;它使用最简主义的窗口管理器而不是功能齐全的桌面环境来提供图形化用户界面。 C…

标准砂轮加工麻花钻或者铣刀螺旋槽齿形

螺旋槽与砂轮的空间位置运动关系可用下图表示&#xff0c;螺旋槽的形成靠工件绕轴线的旋转以及砂轮沿轴线的移动来完成的&#xff0c;以下坐标系可以清楚的描述二者之间的运动关系&#xff1a; 砂轮的形状如下&#xff1a; 经过坐标变换和下面这个重要的公式来计算工件的齿形…

JAVA初阶数据结构(链表)练习(这些可以作为java包中的方法)

这里的每一个题大家都要仔细完成&#xff0c;这些题目每个我都至少思考了两个小时左右&#xff08;沉重心&#xff0c;慢慢来&#xff09; 1.反向链表的实现&#xff08;对链表进行翻转&#xff09;&#xff08;力扣有&#xff09; &#xff08;1&#xff09;图示 &#xff0…

MADQN:多代理合作强化学习

处理单一任务是强化学习的基础&#xff0c;它的目标是在不确定的环境中采取最佳行动&#xff0c;产生相对于任务的最大长期回报。但是在多代理强化学习中&#xff0c;因为存在多个代理&#xff0c;所以代理之间的关系可以是合作的&#xff0c;也可以是对抗&#xff0c;或者两者…

java组合模式揭秘:如何构建可扩展的树形结构

组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将对象组合成树形结构以表示整体/部分层次结构。组合模式使得客户端可以统一对待单个对象和组合对象&#xff0c;从而使得客户端可以处理更复杂的结构。 组合模式的主要组成部分包括&…

C#构造函数

C#中的构造函数是一种特殊的方法&#xff0c;用于创建和初始化类的对象。构造函数的名称与类的名称相同&#xff0c;并且没有返回类型。 在C#中&#xff0c;构造函数有以下几种类型&#xff1a; 默认构造函数&#xff1a;如果在类中没有定义构造函数&#xff0c;系统将自动提供…

基于java+springboot+vue实现的小区物业管理系统(文末源码+Lw+ppt)23-34

摘 要 随着互联网时代的发展&#xff0c;传统的线下管理技术已无法高效、便捷的管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;在人们生活环境要求不断提高的前提下&#xff0c;小区物业管理系统建设也逐渐进入了…

2001-2022年上市公司数字化转型程度指数测算数据(含原始数据+测算代码+计算结果)(无形资产衡量)

2001-2022年上市公司数字化转型程度指数测算数据&#xff08;含原始数据测算代码计算结果&#xff09; 1、时间&#xff1a;2001-2022年 2、指标&#xff1a;证券代码、证券简称、统计截止日期、是否发生ST或*ST或PT、、是否发生暂停上市、行业代码、行业名称、stkcd、year、…

【Python】成功解决NameError: name ‘plt‘ is not defined

【Python】成功解决NameError: name ‘plt’ is not defined &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您…

【PHP安全】PHP伪协议

PHP伪协议&#xff1a; file:// #访问本地文件系统http:// #访问HTTPs网址ftp:// #访问ftp URLphp:// #访问输入输出流zlib:// #压缩流data:// #数据&#xff08;RFC 2397&#xff09;ssh2:// #security shell2expect:// #处理交互式的流glob:// #查找匹配的文件路径phar:// #P…

【MySQL性能优化】- 一文了解MVCC机制

MySQL理解MVCC &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 博客首页 怒放吧德德 To记录领地 &#x1f31d;分享学习心得&#xff0c;欢迎指正&#xff…

打卡学习kubernetes——kubernetes架构原理

接上一篇的内容&#xff0c;除了核心组件&#xff0c;还有一些推荐的Add-ons&#xff1a; kube-dns 负责为整个集群提供DNS服务Ingress Controller 为服务提供外网入口Heapster 提供资源监控&#xff08;没用过这个&#xff0c;但是用过grafana&#xff0c;很方便&#xf…

5.Python从入门到精通—Python 运算符

5.Python从入门到精通—Python 运算符 Python 运算符算术运算符比较&#xff08;关系&#xff09;运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符运算符优先级 Python 运算符 Python语言支持以下类型的运算符: 算术运算符比较&#xff08;关系&#xff09;运算符赋…

基于YOLOv5的火灾检测系统

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文主要内容:详细介绍了火灾检测整个过程&#xff0c;从数据集到训练模型到结果可视化分析。 博主简介 AI小怪兽&#xff0c;YOLO骨灰级玩家&#xff0c;1&#xff09;YOLOv5、v7、v8优化创新&#xff0c;轻松涨点和模型轻量化&#…

CSS 03

1.选择器 1.1 结构伪类选择器 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>结…

Facebook:连接世界的社交巨人

在当今数字化时代&#xff0c;Facebook作为全球最大的社交媒体平台之一&#xff0c;扮演着连接世界的重要角色。它不仅仅是一个社交网站&#xff0c;更是一个数字化的社交生态系统&#xff0c;影响着全球数十亿用户的生活和交流方式。本文将深入探讨Facebook的起源、用户规模和…

MYSQL 是如何保证binlog 和redo log同时提交的?

MYSQL 一个事务在提交的时候能够保证binlog和redo log是同时提交的&#xff0c;并且能在宕机恢复后保持binlog 和redo log的一致性。 先来看看什么是redo log 和binlog&#xff0c;以及为什么要保持它们的一致性。 什么是redo log&#xff0c;binlog redo log是innodb引擎层…

如何使用“Docker registry创建本地仓库,在服务器之间进行文件push和pull”?

1.1、在服务器1&#xff0c;运行registry docker run -d -p 5000:5000 -v ${PWD}/registry:/var/lib/registry --restart always --name registry registry:2.7.11.2、编辑/etc/docker/daemon.json 文件&#xff0c; 192.168.xxx.xxx 换成你自己 registry 服务的地址 sudo na…

可视化Relay IR

目标 为Relay IR生成图片形式的计算图。 实现方式 使用RelayVisualizer可视化Relay&#xff0c;RelayVisualizer定义了一组接口&#xff08;包括渲染器、解析器&#xff09;将IRModule可视化为节点和边&#xff0c;并且提供了默认解析器和渲染器。 首先需要安装依赖&#x…

python工具方法 47 基于paddleseg将目标检测数据升级为语义分割数据

在进行项目研究时,通常需要搜集开源数据集。但是所能搜集到的数据集通常会存在形式上的差异,比如我想要的是语义分割数据,而搜集到的数据集却是目标检测数据;在这种情况下所搜集的数据就完成没有利用价值了么?不,其还存在价值,我们可以通过模型训练对数据标签的标注粒度…
最新文章