【微服务】springcloud-alibaba 配置多环境管理使用详解

目录

一、前言

二、配置多环境问题概述

2.1 什么是微服务多环境配置管理

2.1.1 微服务多环境配置管理问题起源

2.2 为什么要做多环境配置管理

2.3 微服务多环境配置管理解决方案

三、springboot 配置多环境管理解决方案

3.1 前置准备

3.1.1 搭建一个springboot工程

3.1.2 添加配置文件

3.1.3 添加测试接口

3.2 springboot 配置多环境管理方式一

3.2.1 使用idea启动参数控制

3.2.2 jar包启动使用参数控制

3.2.3 在pom中统一管理profiles

四、Nacos 配置多环境管理解决方案

4.1 Namespace 概述

4.1.1 Namespace 介绍

4.1.2 Namespace 作用

4.2 通过Namespace(命名空间)管理多环境配置

4.2.1 创建几个Namespace

4.2.2 在public和dev空间下创建配置文件

4.2.3 工程配置文件中引用public命名空间

4.2.4 添加测试接口

4.2.5 切换配置文件到test命令空间

4.3 Group概述

4.3.1 Nacos Group介绍

4.3.2 Nacos Group作用

4.4 通过Group(分组)管理多环境配置

4.4.1 创建配置文件

4.4.2 修改配置文件

4.4.3 增加测试接口

4.5 使用profiles管理多环境配置文件

4.5.1 nacos添加两个配置文件

4.5.2 修改工程配置文件

4.5.3 添加测试接口

五、写在文末


一、前言

在微服务开发中,通常会涉及到配置的多环境问题,以springboot项目为例,在开发阶段使用的是开发环境的配置信息,比如连接的是开发环境数据库,使用的是开发环境redis,但到了测试阶段,需要使用测试环境的配置信息,最后发布到生产环境又需要重新整一套配置,不同环境的配置管理就为项目部署和实施过程中带来了一定的麻烦,针对这个问题,该如何解决呢,这就是本文将探讨的。

二、配置多环境问题概述

2.1 什么是微服务多环境配置管理

微服务多环境配置管理是指在微服务架构中,针对不同的环境(如开发、测试、生产等)管理和维护不同的配置信息的过程。这些配置信息包括但不限于数据库连接信息、日志级别、缓存设置、外部服务的终端点等。通过微服务多环境配置管理,可以使每个微服务在不同环境中具有灵活的配置,从而实现更好的灵活性、隔离性和可维护性。

2.1.1 微服务多环境配置管理问题起源

微服务多环境配置管理问题通常源自以下情况:

  • 环境差异

    • 不同环境(如开发、测试、生产)之间存在各种差异,包括数据库连接、API终端点、日志级别等,这导致需要针对不同环境进行配置管理。

  • 人为错误

    • 在多环境配置管理过程中,可能会出现人为错误,比如将开发环境的配置误用于生产环境,这可能导致系统故障或安全漏洞。

  • 维护困难

    • 随着微服务数量的增加,手动管理多个微服务在多个环境下的配置变得困难,容易导致配置不一致或遗漏。

  • 部署流程不一致

    • 由于多环境配置管理不规范,可能导致不同环境下的部署流程不一致,增加了部署过程中的不确定性和风险。

  • 安全性和合规性

    • 在多环境配置管理中,需要确保敏感信息(如数据库密码、API密钥等)的安全性和合规性,这增加了管理难度。

2.2 为什么要做多环境配置管理

多环境配置管理在微服务架构设计以及开发运维中非常重要,主要原因如下:

  • 灵活性高

    • 微服务架构通常由多个微服务组成,每个服务可能需要在不同环境(如开发、测试、生产)中运行。通过多环境配置管理,可以使每个服务在不同环境中具有灵活的配置,无需修改代码。

  • 隔离性好

    • 不同环境可能需要不同的配置,如数据库连接、日志级别、缓存设置等,通过多环境配置管理,可以避免将开发环境配置误用于生产环境,从而提高系统的隔离性和安全性。

  • 部署流程标准化与规范化

    • 多环境配置管理可以帮助简化部署流程,使部署过程更加标准化和自动化。开发人员和运维人员可以根据环境需求轻松地部署服务,减少人为错误的可能性。

  • 便于测试

    • 不同环境下的配置管理有助于更好地进行测试,包括单元测试、集成测试和端到端测试。通过在不同环境中测试服务,可以确保服务在各个阶段都能够正常运行。

2.3 微服务多环境配置管理解决方案

针对微服务多环境配置管理,通常可以采用以下解决方案:

  • 环境变量管理

    • 使用操作系统或容器提供的环境变量功能,通过在不同环境中设置不同的环境变量来实现微服务的配置管理。

  • 配置文件管理

    • 将不同环境的配置信息存储在独立的配置文件中,例如使用JSON、YAML或Properties格式。通过部署时选择相应的配置文件来加载不同环境的配置信息。在springboot,springcloud中通常采用这种方式来命名配置文件。

  • 配置中心

    • 使用专门的配置中心服务,如Spring Cloud Config、Consul、Zookeeper等,通过这些服务集中管理微服务的配置信息,根据环境动态加载配置。

  • 自动化部署工具集成

    • 结合自动化部署工具,如Jenkins、Ansible、Docker等,实现在不同环境中自动加载相应的配置信息,并确保微服务的正确部署和配置。

  • 集成密钥管理

    • 在多环境配置管理中,确保对敏感信息(如数据库密码、API密钥等)的安全管理。可以利用密钥管理服务(如AWS KMS、HashiCorp Vault等)来安全地存储和获取这些敏感信息。

三、springboot 配置多环境管理解决方案

3.1 前置准备

3.1.1 搭建一个springboot工程

引入如下核心依赖:

    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency></dependencies>

3.1.2 添加配置文件

在默认的application.yml配置文件中添加如下配置信息

server:port: 8088app:user:name: springboot default

3.1.3 添加测试接口

添加一个测试接口,读取上述配置文件的信息

    @Value("${app.user.name}")private String appUserName;//localhost:8088/getConfig@GetMapping("/getConfig")public Object getConfig(){System.out.println(appUserName);return appUserName;}

测试一下接口

3.2 springboot 配置多环境管理方式一

Spring Profile是 SpringBoot 框架用于处理不同环境配置的解决方案。Spring Boot 为每个 Profile 提供了一个独立的 application.properties(或 application.yml)配置文件。当你激活一个特定 Profile 时,Spring Boot 会查找名为 application-{profile}.properties 的文件,{profile}是环境标识,并把其中的属性加载到 Spring Environment 中。

Profile 可以帮助我们在不改变应用代码的情况下,根据当前环境动态地激活或者切换不同的配置。默认情况下,Spring Boot 使用的是 application.properties 文件。

如下,在resources目录下再创建两个配置文件,分别命名为:application-dev.yaml和application-test.yaml

application-dev.yaml配置内容如下

server:port: 8088app:user:name: springboot dev

application-test.yaml配置内容如下

server:port: 8088app:user:name: springboot test

然后再在application.yaml配置文件中,使用Spring Profile来区分使用上面的哪个配置文件

spring:profiles:active: dev

启动工程后,再次访问接口,由于这里active中的配置是:dev,即使用dev的那个配置文件中的配置信息,和预期的结果一致。

3.2.1 使用idea启动参数控制

在idea中启动时,通过设置vm启动参数的变量来控制使用哪个配置文件

#vm启动设置:
-Dspring.profiles.active=test
#Program设置
--spring.profiles.active=test

在保持上面的配置文件情况下,重新启动工程,浏览器再次访问一下,可以看到本次读取的是test配置文件中的信息

3.2.2 jar包启动使用参数控制

打成jar包之后,也可以通过在启动命令中添加参数的形式控制使用哪个配置文件

java -jar -Dspring.profiles.active=test boot-mi-1.0-SNAPSHOT.jar

再次访问,看到如下效果

3.2.3 在pom中统一管理profiles

这是一种在打包时候指定使用哪个环境的配置文件的方式,在公共pom中添加如下配置,最外层为profiles标签,里面可以添加多个profile标签,每个profile标签包裹的内容即为不同环境下的配置引用,activeByDefault标签熟悉为默认开启的环境。

    <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></profiles>

application.yaml配置文件中,做如下修改,active后的参数使用上述pom中的参数

spring:profiles:active: @spring.profiles.active@

然后在打包阶段,具体指定使用开启哪个环境的配置,命令如下:

#使用test环境的配置文件
mvn clean package -Ptest#使用dev环境的配置文件
mvn clean package -Pdev

打完包之后,再次启动测试,通过这种方式,也能切换为test环境下的配置信息

补充说明

pom中使用了profiles标签管理之后,在idea中打包阶段,能够看到在右侧会出现dev和test的勾选框,通过这里进行勾选打包也可以达到相同的效果

四、Nacos 配置多环境管理解决方案

在使用了微服务治理框架之后,配置的多环境管理问题就更加突出了,主要是微服务的模块更多,彼此之间存在互相依赖,互相调用,一旦控制不好,不仅未能快速的定位和解决问题,反而会在配置管理的事情上消耗很多时间精力。而引入了配置中心之后,通过配置中心对配置信息的统一管理,可以很好的做到按环境隔离配置文件的目的。下面以大家熟知的Nacos为例,详细说说如何基于Nacos 解决配置的多环境管理问题。

4.1 Namespace 概述

4.1.1 Namespace 介绍

Nacos的Namespace(命名空间)是用来实现配置和服务的逻辑隔离的功能。通过命名空间,可以将不同的配置和服务实例划分到不同的逻辑空间中,以实现隔离和管理。命名空间在多租户场景下非常有用,可以让不同的租户或团队在同一个Nacos集群中独立地管理它们的配置和服务注册。

4.1.2 Namespace 作用

具体来说,Nacos的Namespace可以实现以下作用:

  • 隔离配置和服务

    • 不同的Namespace下的配置和服务相互隔离,不会相互干扰。这样可以确保不同的团队或租户在使用Nacos时能够独立管理它们的资源。

  • 权限控制

    • 通过Namespace可以实现针对不同租户或团队的权限控制,可以限制对特定Namespace下的配置和服务的访问权限,保障安全性。

  • 资源管理

    • 命名空间可以让不同团队或租户对自己的资源进行独立管理,包括配置的发布和服务的注册,有利于资源的精细化管理。

接下来通过两个实际的案例说明下如何基于Namespace管理多环境的配置信息,参考如下操作步骤。

4.2 通过Namespace(命名空间)管理多环境配置

4.2.1 创建几个Namespace

如下,为演示使用,创建多个Namespace

4.2.2 在public和dev空间下创建配置文件

分别在public和dev命名空间下创建一个相同的配置文件,配置内容稍作区分

public下配置内容:

test配置内容:

4.2.3 工程配置文件中引用public命名空间

在springcloud的工程配置文件中,config下引用的配置空间使用public的ID,如下:

server:port: 8081spring:application:name: producer-serverprofiles:active: testcloud:nacos:server-addr: nacos地址:8848#非必须,如果不填,将使用 publicdiscovery:group: DEFAULT_GROUPnamespace: publicserver-addr: nacos地址:8848config: namespace: publicgroup: DEFAULT_GROUPserver-addr: nacos地址:8848#----- 引用的nacos配置文件 -----  这个时候会去拼接dataid的完整信息prefix: app-userfile-extension: yaml

4.2.4 添加测试接口

工程中添加一个测试接口,用于读取nacos的public中添加的配置文件中的配置信息

    @Value("${app.user.name}")private String appUserName;//localhost:8081/getConfig@GetMapping("/getConfig")public String getConfig(){System.out.println(appUserName);return appUserName;}

启动工程后,测试接口,可以看到能够从指定的public命名空间中拉取到配置信息

4.2.5 切换配置文件到test命令空间

将下面的配置文件中namespace改为test的ID

再次启动工程访问,可以看到本次访问的就是test空间的下配置内容

4.3 Group概述

4.3.1 Nacos Group介绍

在Nacos中,Group是用来对服务实例或配置项进行逻辑分组的功能。通过Group,用户可以将服务实例或配置项进行分类,以便更好地组织和管理这些资源。Group的引入可以帮助用户在服务发现、路由控制和配置管理等方面更加灵活地进行管理和操作。

  • 在服务注册与发现中,可以针对不同的Group实施路由规则的定义和管理,以实现更灵活的服务调用控制。此外,针对不同的Group还可以实施不同的权限控制,确保在多团队或多租户的场景下,资源得到适当的访问控制。

  • 在配置管理中,同样可以使用Group进行不同版本配置的管理和区分,便于进行灰度发布或版本回滚等操作。通过Group的引入,Nacos可以支持更加细粒度和灵活的资源管理和控制。

4.3.2 Nacos Group作用

Nacos中的Group(分组)具有以下作用:

  • 逻辑分类

    • 通过Group可以将不同的服务实例或配置项进行逻辑分类,从而更好地组织和管理这些资源。

  • 路由规则

    • 在服务注册与发现中,可以根据Group对服务进行路由规则的定义和管理,以实现更灵活的服务调用控制。

  • 权限控制

    • 可以针对不同的Group实施不同的权限控制,确保在多团队或多租户的场景下,资源得到适当的访问控制。

  • 版本管理

    • 在配置管理中,可以使用Group进行不同版本配置的管理和区分,便于进行灰度发布或版本回滚。

4.4 通过Group(分组)管理多环境配置

4.4.1 创建配置文件

Group是针对某个具体的Namespace来说的,即在同一个Namespace下,相同的配置文件,可以通过不同的Group分组来进行区分,如下,我们在public 空间下创建两个相同的配置文件,分别归在不同的group下面。

第一个分组为:DEV_GROUP

第二个分组为:TEST_GROUP

4.4.2 修改配置文件

配置文件中,配置连接nacos的group使用DEV_GROUP,同时prefix那里,注意更换为nacos里面的那个app-data配置文件

server:port: 8081spring:application:name: producer-serverprofiles:active: testcloud:nacos:server-addr: IP:8848#服务发现discovery:group: DEFAULT_GROUPnamespace: publicserver-addr: IP:8848config:namespace: publicgroup: DEV_GROUPserver-addr: IP:8848#----- 引用的nacos配置文件 -----  这个时候会去拼接dataid的完整信息prefix: app-datafile-extension: yaml

4.4.3 增加测试接口

添加如下测试接口

    @Value("${app.group.url}")private String appGroupUrl;//localhost:8081/getConfigGroup@GetMapping("/getConfigGroup")public String getConfigGroup(){System.out.println(appGroupUrl);return appGroupUrl;}

启动工程之后测试一下接口,可以看到读取的是DEV_GROUP下配置文件的内容

再将连接的分组信息切换为TEST_GROUP

再次启动工程进行测试

4.5 使用profiles管理多环境配置文件

这里的profiles与上述springboot中提到的有相似的地方,但是与springboot中不同的是,在springcloud-alibaba配置文件中,对于这个配置项的启用有自己的一套规则,具体来说如下:

托管到nacos-server上面的配置都有一个唯一的key,这个唯一key的确定标准为:namespace/group/dataId,有点类似于maven中确定一个jar包的坐标定位,如何在应用程序中读取配置的dataId呢?nacos的SDK中根据dataId去nacos server获取一个配置文件内容,而dataId的组成格式如下:

${prefix}-${spring.profiles.active}.${file-extension}

参数说明:

  • prefix,默认为spring.application.name,也可以通过配置项:spring.cloud.nacos.config.prefix来手动指定,比如在上面的演示中使用的就是自定义配置文件名称的格式;

  • springles.active,即为当前环境对应的profile;

    • 注意:当spring.profiles.active为空的时候,对应的连接符 - 也不存在了,dataId的拼接格式将退化为:${prefix}.${file-extension},比如上面案例中,最后读取的nacos配置文件为: app-data.yaml;

  • file-extension,为配置内容的数据格式,通过配置项:spring.cloud.nacos.config.file-extension来指定,目前支持的格式主要是两种,yaml和properties;

下面结合实际案例来演示下这种方式的使用。

4.5.1 nacos添加两个配置文件

在public命名空间下增加两个配置文件,名称分别为:app-data-test.yaml和app-data-dev.yaml,配置内容分别如下:

app-data-test.yaml

app-data-dev.yaml

4.5.2 修改工程配置文件

修改工程中连接配置文件的信息,其他地方暂时不动,主要是下面这里,改为test;

通过上面对于应用读取nacos上面配置文件的格式可以知道,这种方式下,读取的nacos配置文件完整名称为:app-data-test.yaml;

4.5.3 添加测试接口

增加下面的测试接口,读取上面的配置信息

    @Value("${app.data.test}")private String appDataTest;//localhost:8081/getAppDataTest@GetMapping("/getAppDataTest")public String getAppDataTest(){System.out.println(appDataTest);return appDataTest;}

启动工程进行测试,此时读取到的是app-data-test.yaml中添加的配置内容

profiles.active 切换为dev,然后重新启动工程再次测试,此时读取到的是app-data-dev.yaml中添加的配置内容

五、写在文末

本文通过实际案例详细介绍了springboot配置多环境管理的使用,以及基于nacos的配置多环境管理的实践,在实际开发中,配置多环境管理是一个很难避开的问题,同时也是微服务治理中一个很重要的内容,值得深入探究,本文到此结束,感谢观看。

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

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

相关文章

【PowerDesigner】创建和管理CDM之使用实体间关系

目录 &#x1f30a;1. PowerDesigner简介 &#x1f30d;1.1 常用模型文件 &#x1f30d;1.2 PowerDesigner使用环境 &#x1f30a;2. 创建和管理CDM &#x1f30d;​​​​​​2.1 新建CDM &#x1f30d;2.2 使用实体间关系 &#x1f30c;a. 使用联系 &#x1f30c;b. …

嵌入式仪器模块:DMM LCR SMU 及自动化测试软件

• 6 位数字表显示 • 24 位分辨率 • 250 KSPS 采样率 • 电源和数字 I/O 均采用隔离抗噪技术 应用场景 • 电压、电流、电阻、电感、电容的高精度测量 • 二极管/三极管测试 通道1222输入阻抗电压10 MΩHigh-Z, 10 MΩHigh-Z电流10 Ω50 mΩ / 2 Ω / 2 KΩ2 KΩ / 2 M…

如何理解external

external 函数应该只被外部函数调用但也可以被内部调用&#xff0c;但是这种内部调用也是有外部调用机制&#xff0c;即新产生message! 例子1 // SPDX-License-Identifier: GPL-3.0pragma solidity >0.8.2 <0.9.0;contract ExternalDemo{address public caller;functi…

【图解IO与Netty系列】Netty核心组件解析

Netty核心组件解析 Bootstrap & ServerBootstrapEventLoop & EventLoopGroupChannelChannelHandler & ChannelPipeline & ChannelHandlerContextChannelHandlerChannelPipelineChannelHandlerContext ChannelFuture Bootstrap & ServerBootstrap Bootstra…

A股所有公司ZL申请与创新绩效分析(2000-2022年)

数据简介&#xff1a;专利是创新成果的主要载体&#xff0c;专利所包含的技术、经济、法律等信息主要通过结构化专利专利文献著录项的形式加以呈现。专利申请与创新绩效已成为衡量上市公司竞争力的重要指标。目前&#xff0c;各国ZSCQ管理部门开发管理的开放式平台是获取ZL数据…

OBS 录屏软件:录制圆形头像画中画,设置卡通人像(保姆级教程,有步骤图,建议收藏)

Mac分享吧 文章目录 一、OBS录屏软件 圆形头像画中画效果注意&#xff1a;圆形画中画仅需要在软件中设置一次&#xff0c;每次录制&#xff0c;使用带有圆形头像画中画的场景 录制视频即可。该场景不可删除&#xff01;&#xff01;&#xff01;若删除&#xff0c;则需要重新设…

时序数据库是Niche Market吗?

引言 DB-Engines的流行程度排行从其评估标准[4]可以看出完全不能够做为市场规模的评估标准。甚至于在知道市场规模后可以用这个排行作为一个避雷手册。毕竟现存市场小&#xff0c;可预见增长规模小&#xff0c;竞争大&#xff0c;创新不足&#xff0c;那只能卷价格&#xff0c…

数据结构---查找

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…

运 算 符

算术运算符 算术运算符包括&#xff1a;&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;%&#xff0c;&#xff0c;-- 当左右两边都是数值型时&#xff0c;则做加法运算。 当左右两边有一方为字符串&#xff0c;则做拼接运算。任何一个 Java 对象都可以转换为字符串。 …

.Net实现SCrypt Hash加密

方案1 &#xff08;加密后存储“算法设置”、“盐(随机值)”、“Hash值”&#xff0c;以“$”分隔&#xff09;&#xff1a; //Nuget引入SCrypt.NET库 using Org.BouncyCastle.Crypto.Generators; using Scrypt; using System; using System.Security.Cryptography; namespace …

8.让画面动起来

一、Unity Shader中的内置变量&#xff08;时间篇&#xff09; 动画效果往往都是把时间添加到一些变量的计算中&#xff0c;以便在时间变化的同时也可以随之变化。Unity shader提供了一系列关于时间的内置变量来允许我们方便地在Shader中访问运行时间&#xff0c;实现各种动画…

暴雨推出X705显示器:23.8英寸100Hz IPS屏

IT资讯 6月 7 日消息&#xff0c;日前&#xff0c;暴雨发布了一款 23.8 英寸 IPS 显示器&#xff0c;直屏、支持 100Hz 刷新率。 据官方介绍&#xff0c;X705 显示器分辨率为 19201080&#xff0c;亮度为 300 尼特&#xff08;典型值&#xff09;&#xff0c;对比度 1000:1&…

从Log4j和Fastjson RCE漏洞认识jndi注入

文章目录 前言JNDI注入基础介绍靶场搭建漏洞验证注入工具 log4j RCE漏洞分析漏洞靶场检测工具补丁绕过 Fastjson RCE漏洞分析漏洞靶场检测工具补丁绕过 总结 前言 接着前文的学习《Java反序列化漏洞与URLDNS利用链分析》&#xff0c;想了解为什么 Fastjson 反序列化漏洞的利用…

关于用宽带(拨号)连接VPN无法上网,但是wifi或者热点就可以的问题

参考链接&#xff1a;https://zhuanlan.zhihu.com/p/580929250https://zhuanlan.zhihu.com/p/580929250 https://blog.csdn.net/Yaoyao2024/article/details/132245249文章浏览阅读10w次&#xff0c;点赞161次&#xff0c;收藏515次。很多同学在学习访问学校提供的资源时或者一…

队列和栈的实现

文章目录 队列队列的定义队列常见的基本操作队列的顺序存储结构实现 栈栈的定义栈的常见基本操作栈的顺序存储实现 栈的链式存储实现 队列 队列的定义 队列&#xff08;queue&#xff09;是只允许在一端进行插入操作&#xff0c;而在另一端进行删除操作的线性表。队列是一种先…

Vitis HLS 学习笔记--聚合与解聚-AXI主接口

目录 1. 简介 2. 用法及语法 3. 详细解读 4. 总结 1. 简介 在使用 Vitis HLS 工具进行硬件设计时&#xff0c;如果你在接口上使用了结构体&#xff0c;工具会自动把结构体里的所有元素组合成一个整体。就像把一堆零件组装成一个玩具一样。这样做的好处是&#xff0c;数据可…

【西瓜书】大题

1.线性回归 思路&#xff1a;ywxb&#xff0c;w为一维数组&#xff0c;求均方误差MSE&#xff0c;对w和b分别求偏导为0得到关于w和b的闭式求解。预测第十年的代入ywxb求解即可。 2.查准率、查全率 思路&#xff1a;先计算每个算法测试结果的混淆矩阵&#xff0c;再根据混淆矩阵…

pyrouge(ROUGE-1.5.5)的安装步骤和使用说明(适用于Linux 系统)

摘要&#xff1a;本文讲解了如何配置和使用文本摘要的评价指标ROUGE(linux 系统)。 ✅ NLP 研 1 选手的学习笔记 简介&#xff1a;小王&#xff0c;NPU&#xff0c;2023级&#xff0c;计算机技术 研究方向&#xff1a;摘要生成、大语言模型生成 文章目录 一、为啥要写这篇博客&…

问题汇总:MPU6050(软件iic)

以下为个人问题汇总&#xff0c;排查点汇总可能大有缺陷&#xff0c;如有错误&#xff0c;欢迎指正。 排查点汇总 检查软件iic的时序操作用示波器或逻辑分析仪检查波形 无法使用逻辑分析仪进行I/O引脚波形分析 充当SDA、SCL的引脚要配置为推挽输出; 另外&#xff0c;逻辑分…

挑战绝对不可能:再证有长度不同的射线

黄小宁 一空间坐标系中有公共汽车A&#xff0c;A中各座位到司机处的距离h是随着座位的不同而不同的变数&#xff0c;例如5号座位到司机处的距离是h3&#xff0c;…h5&#xff0c;…。A移动了一段距离变为汽车B≌A&#xff0c;B中5号座位到司机处的距离h’h3&#xff0c;…h’h5…