SpringCloud-10_Alibaba Nacos

news2024/9/23 9:28:01

SpringCloud系列

SpringCloud-9、Sleuth+Zipkin
SpringCloud-8、Gateway网关服务
SpringCloud-7_OpenFeign服务调用
SpringCloud-6_Ribbon负载均衡
SpringCloud-5_模块集群化
SpringCloud的组件一览图


文章目录

  • SpringCloud系列
  • Nacos基础
    • Nacos是什么?
    • Nacos下载&运行
  • 创建Nacos服务提供者
    • 需求说明/图解
    • 创建member-service-nacos-provider-10004并注册到NacosServer8848
      • 创建member-service-nacos-provider-10004
      • 修改父项自pom.xml(无需实际操作)
      • 修改本模块pom.xml
      • 创建application.yml
      • 创建主启动类
      • 为看到更好提示,修改Controller
      • 测试
    • 创建member-service-nacos-provider-10006并注册到NacosServer8848
  • 创建Nacos的服务消费者
    • 创建member-service-nacos-consumer-80并注册到NacosServer8848,步骤:
  • Nacos AP和CP切换
    • 各种注册中心对比
    • 选择AP还是CP?
    • AP和CP切换
  • Nacos配置中心实例
    • 需求分析/图解
    • 在Nacos Server加入配置
    • 创建Nacos配置客户端模块e-commerce-nacos-config-client5000
    • 标题Nacos分类配置(实现配置隔离)
      • DatalD方案
      • Group:方案
      • Namespace方案
      • Namespace/Group/Data ID关系梳理


Nacos基础

官网
Nacos文档

Nacos是什么?

一句话:Nacos就是注册中心[替代Eureka]+配置中心[替代Config]
Nacos:Dynamic Naming and Configuration Service
Nacos:架构理论基础:CAP理论(支持AP和CP可以切换)

Nacos下载&运行

下载:https:/github.com/alibaba/nacos/releases/tag/1.2.1
环境要求:Java8/Maven3.2.x+
解压,双击即可运行bin/startup.cmd(Windows命令脚本)
浏览器http:/localhost:8848/nacos
用户名/密码均为 nacos
在cmd(需要管理员身份运行)使用指令netstat -anb | more 查看8848端口是否正在监听

创建Nacos服务提供者

需求说明/图解

  • 先完成服务端provider的创建
    在这里插入图片描述

创建member-service-nacos-provider-10004并注册到NacosServer8848

创建member-service-nacos-provider-10004

注意创建前先选中总项目,再new Module/maven/member-service-nacos-provider-10004。否则可能创建到子项目里面去了。
创建完成后,检查:
1、检查自身的pom.xml,是不是在父项目里面:

e-commerce-center

2、检查父项目的pom.xml,查看是不是纳入了父项目的聚合管理
member-service-provider-10000
member-service-nacos-provider-10004

修改父项自pom.xml(无需实际操作)

1、引入nacos的代码由来,官方文档,3.2 How to Introduce Nacos Discovery for service registration/discovery

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2、需要spring-cloud-alibaba-dependencies依赖,之前已经引入过,这儿仅仅是再强调一下,可以在官网看到该代码:2. Dependency Management

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.1.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

修改本模块pom.xml

参考member-service-provider-10000的pom.xml文件,进行引用,区别在于10000是用的eureka,改成nacos就行了

    <dependencies>
       
        <!--引入nacos-starter场景启动器-->
        <!--比老师的多了一个starter,因为文档有,先尝试,不对删除-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        
		 <!--使用版本仲裁-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--说明:starter-actuator是springboot程序的监控系统,可实现系统的健康检测
        可以通过http://localhost:10000/actuator看到相关的连接和信息-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--引入mybatis,整合到springboot-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <!--引入druid-spring-boot-starter,这个和druid不一样,因为父项目没有,不指定版本会报错-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.17</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <dependency>
            <groupId>com.stein.springcloud</groupId>
            <artifactId>e-commerce-center-common-api</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

创建application.yml

接下来的启动类和yml我们都复制member-service-provider-10000的文件来进行修改即可。
我们直接从文件夹复制main/java和resources到nacos下,其原有空文件夹直接删除。这样做的原因,我个人理解为,直接在IDEA里面复制,会更改文件的引用和关联,反而会出现一些问题,不如文件复制来得安全。

然后修改application.yml
修改端口为: port: 10004
修改名称为:name: member-service-nacos-provider ,便于区分各模块
删除这儿不需要的zipkin和sleuth的配置
删除eureka的配置
配置nacos
最终结果如下:

server:
  port: 10004
spring:
  application:
    name: member-service-nacos-provider #配置应用的名称。可以自定义,这儿保持一致了

  datasource:
    type: com.alibaba.druid.pool.DruidDataSource #指定使用的数据源
    url: jdbc:mysql://localhost:3306/e_commerce_center_db?useSSL=true&useUnicode=true&characterEncoding=utf-8
    username: root
    password: root
  cloud:
    nacos: #配置nacos
      discovery:
        server-addr: localhost:8848 #配置Nacos Server的地址

mybatis:
  mapper-locations: classpath:mapper/*.xml #指定mapper.xml文件位置
  type-aliases-package: com.stein.springcloud.entity #指明实体类所在包别名,可以通过类名直接引用
#配置暴露所有的监控点
management:
  endpoints:
    web:
      exposure:
        include: '*'

创建主启动类

原有启动类需要删除eureka的注解和更改类名,所以直接删了重新创建一个

//启用Nacos发现注解
@EnableDiscoveryClient
@SpringBootApplication
public class MemberNacosProviderApplication10004 {
    public static void main(String[] args) {
        SpringApplication.run(MemberNacosProviderApplication10004.class,args);
    }
}

为看到更好提示,修改Controller

修改Controller的一句语句即可

            //String msg="本次任务由member-service-provider-10000执行";
            String msg="本次任务由member-nacos-provider-10004执行";

测试

启动Nacos Server 8848。即软件bin/startup.cmd(Windows命令脚本),并通过浏览器http:/localhost:8848/nacos查看是否正确运行。
启动member-service-nacos-provider-10004
观察nacos服务是否注册成功
浏览器:
http://localhost:10004/member/get/1
可以在http://localhost:8848/nacos的页面下,服务管理/服务列表下看到,服务名,集群数目1,实例数1,等等

创建member-service-nacos-provider-10006并注册到NacosServer8848

它就可以参考member-service-nacos-provider-10004的文件进行配置,更加简单,就不一一列出了。
创建member-service-nacos-provider-10006
修改本模块pom.xml
创建application.yml
port:10006
创建主启动类
通过rename重命名来修改类名,比较快捷。
为看到更好提示,修改Controller
输出提示改为 10006执行
测试
http://localhost:10006/member/get/1
可以在http://localhost:8848/nacos的页面下,服务管理/服务列表下看到,服务名,集群数目1,实例数2,等等。可以查看“详情”
服务方的已完成

创建Nacos的服务消费者

需求说明/图解
添加消费方,通过nacos调用服务方
在这里插入图片描述

创建member-service-nacos-consumer-80并注册到NacosServer8848,步骤:

创建member-service-nacos-consumer-80
修改pom.xml
参考member-service-consumer-80的pom.xml
看来spring-cloud-starter-alibaba-nacos-discovery之前老师确实是写错了的,看后文什么时候发现并更正吧。或者不会有影响

    <dependencies>
        <!--引入Alibaba Nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--使用版本仲裁-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--说明:starter-actuator是springboot程序的监控系统,可实现系统的健康检测
        可以通过http://localhost:80/actuator看到相关的连接和信息-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--相对于provider,删除了以下依赖
        mybatis
        druid
        mysql
        jdbc
        test-->
        <dependency>
            <groupId>com.stein.springcloud</groupId>
            <artifactId>e-commerce-center-common-api</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

创建resources/application.yml

server:
  port: 80
spring:
  application:
    name: member-service-nacos-consumer-80
  #配置nacos
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos server的服务地址

创建主启动类java\com\stein\springcloud\MemberConsumerApplication.java

@SpringBootApplication
@EnableDiscoveryClient //启动引入的Nacos发现
public class MemberNacosConsumerApplication80 {
    public static void main(String[] args) {
        SpringApplication.run(MemberNacosConsumerApplication80.class,args);
    }
}

业务类
RestTemplate用来做远程调用的/config

@Configuration
public class CustomizationBean {
    //nacos本身就集成了Ribbon,直接支持Ribbon+RestTemplate调用
    //说明:配置注入RestTemplate bean/对象
    //这里的@LoadBalanced就是赋予RestTemplate负载均衡的能力
    //默认是使用轮询算法来访问远程调用接口/地址
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

功能Controller

@Slf4j
@RestController
public class MemberNacosConsumerController {
    @Resource
    private RestTemplate restTemplate;

    private static final String MEMBER_SERVICE_NACOS_PROVIDER_URL="http://member-service-nacos-provider";
    //添加方法
    @PostMapping("/member/nacos/consumer/add")
    public Result<Member> addMember(Member member){
        log.info("consumer-member={}",member);
        return restTemplate.postForObject(MEMBER_SERVICE_NACOS_PROVIDER_URL + "/member/add", member, Result.class);
    }
    //查询方法
    @GetMapping("/member/nacos/consumer/query/{id}")
    public Result<Member> queryMemberById(@PathVariable Long id){
        return restTemplate.getForObject(MEMBER_SERVICE_NACOS_PROVIDER_URL+"/member/query/"+id,
                Result.class);
    }
}

测试
运行nacos.cmd
运行member-service-nacos-provider-10006
运行member-service-nacos-provider-10004
运行member-service-nacos-consumer-80
浏览器查看:http://localhost:8848/nacos 服务管理/'服务列表,可以看到这3个服务名
浏览器访问:http://localhost/member/nacos/consumer/query/2 可以正常查询
配置自己的负载均衡算法(如随机算法),测试完毕恢复成原来的轮询算法

@Configuration
public class RibbonRule {
    @Bean //一定要记得这个Bean,不然不会生效
    public IRule myRibbonRule(){
        return new RandomRule();
    }
}

Nacos AP和CP切换

各种注册中心对比

特性对比

选择AP还是CP?

1、CP:服务可以不能用,但必须要保证数据的一致性。
2、AP:数据可以短暂不一致,但最终是需要一致的,无论如何都要保证服务的可用。
3、取舍:只能在CP和AP选择一个平衡点,大多数都是选择AP模式

AP和CP切换

Nacos中AP和CP模式如何切换

Nacos配置中心实例

需求分析/图解

配置中心,个人理解,用于统一配置,统一管理等,方便,灵活。

在Nacos Server加入配置

1.进入到Nacos Server
2.加入配置,特别提醒:文件后缀.yaml别忘了,不能是.yml
配置管理/配置列表,点击“+”号,
创建Data ID:e-commerce-nacos-config-client-dev.yaml
配置格式:选择YAML
配置内容:需要注意缩进,以及冒号:后面的空格,值加“引号”

config:
    ip: "192.168.222.222"
    name: "stein"

创建Nacos配置客户端模块e-commerce-nacos-config-client5000

创建Module,名为:e-commerce-nacos-config-client5000
创建好后,检查自己的pom.xml和父项目的pom.xml,看看是否相互对应
修改pom.xml
参考member-service-nacos-consumer-80的denpendencies
添加配置中心依赖,其他和consumer-80一致

        <!--加入nacos配置中心的依赖 版本依然是靠版本仲裁获得-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

刷新pom.xml
创建main/resources/application.yml

spring:
  profiles:
    active: dev #指定环境,常见的环境有dev开发/test测试/prod生户

创建bootstrap.yml
说明:在项目启动时,会先运行bootstrap.yml,再运行application.yml。两个文件可以配合使用

server:
  port: 5000
spring:
  application:
    # 这里name需要参考nacos 配置中心的Data Id。
    # 注意-dev是根据配置自动添加的。添加后,需要和Data Id一致
    name: e-commerce-nacos-config-client
  # 配置nacos
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #配置中心地址。分布式,可以是不一样的
        file-extension: yaml #指定配置文件格式。也参与了Data Id的名称拼接,后缀名.yaml

主启动类
路径java\com\stein\springcloud\NacosConfigClientApplication5000.java

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientApplication5000 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientApplication5000.class,args);
    }
}

业务类
创建controller/NacosConfigClientController.java

@RestController
@RefreshScope
@Slf4j
public class NacosConfigClientController {
//    1.client会拉取nacos server的e-commerce--nacos-config-client-dev.yaml
//    的config。
    @Value("${config.ip}")
    private String configIp;
    @Value("${config.name}")
    private String configName;

    @GetMapping("/nacos/config/ip")
    public String getConfigIp(){
        return configIp;
    }

    @GetMapping("/nacos/config/name")
    public String getConfigName(){
        return configName;
    }
}

测试
运行nacos
运行NacosConfigClientApplication5000.java
浏览器访问:http://localhost:5000/nacos/config/ip 或者 http://localhost:5000/nacos/config/name 可以看到对应的config内容
踩坑注意:端口6000等有一系列禁用的端口,更换不使用即可。

注意事项和细节
src\main\java\com\hspedu\springcloud\controller\NacosConfigClientController.java@Value(“${config.ip}”),
import org.springframework.beans.factory.annotation.Value;而不是lombok包下的。
1.配置文件application.yml和bootstrap.yml结合会得到配置文件/资源的地址
2.参考文档:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
3.注意在Nacos Server的配置文件的后缀是.yaml,而不是.yml
4.在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动,也
就是说如果项目不能正确的获取到Nacos Server的配置数据,项目是启动不了的。
5.springboot中配置文件的加载是存在优先级顺序的,bootstrap.yml优先级高于application.yml
6.@RefreshScope是springcloud原生注解,实现配置信息自动刷新,如果在Nacos Server修改了配置数
据,Client端就会得到最新配置

标题Nacos分类配置(实现配置隔离)

DatalD方案

需求分析
环境不同,引入方式不同。
配置实现
启动nacos
浏览器访问:http://localhost:8848/nacos,管理配置/配置列表,:“+”号添加
DataID:名称+方式+后缀的命名方式
配置格式:YAML
config:
ip: “192.168.3.3[test测试]”
name: “试试就测试”
修改application.yml
spring:
profiles:
active: test #/这儿改成了test
测试
浏览器访问:
http://localhost:5000/nacos/config/name
http://localhost:5000/nacos/config/ip
查看对应结果

Group:方案

需求分析
在一个分布式项目中,有不同的开发小组,需要到Nacos Server获取对应的开发环境配置的数据。实现小组之间的配置隔离。
其余配置参考DataID方案。
配置实现
分组group重新建立一个,不使用原有default_group 即可。
修改application.yml
修改bootstrap.yml
spring:
cloud:
config:
group: order #添加该属性,选择哪个分组,默认是default_group
测试

Namespace方案

需求分析
比如不同的公司进入来开发不同的模块。
配置实现
nacos网页,命名空间,新建命名空间,命名空间名,和描述,ID自动生成
然后在不同命名空间,创建自己的独立配置
修改application.yml
修改bootstrap.yml
spring:
cloud:
config:
group: order #添加该属性,选择哪个分组,默认是default_group
namespace: d381703c-26da-43c3-ae5e-d49cd2b5e63b #这儿填写namespaceID
测试

Namespace/Group/Data ID关系梳理

  1. 他们的关系如图:
    在这里插入图片描述
  2. 梳理
    ·Nacos默认的命名空间是public,Namespace主要用来实现配置隔离,隔离范围大
    ·Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去
    ·Service就是微服务,相同的Service可以是一个Cluster(簇/集群),Instance就是微服务的实例

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

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

相关文章

JavaScript:哈希表

文章目录 哈希表242. 有效的字母异位词思路补充&#xff1a;JavaScript String charCodeAt() 方法代码详细分析 349. 两个数组的交集代码分析补充&#xff1a;JavaScript Set 对象思考一下哈希是什么&#xff1f;什么时候使用&#xff1f;补充&#xff1a;js 数组 map() 基本用…

github使用workflow工作流git push后自动打包部署github pages

workflows介绍 根目录新建.github/workflows/docs.yml .github/workflows/ 目录是用于存放 GitHub Actions 工作流程文件的目录&#xff0c;该目录的文件名必须以 .yml 或 .yaml 为后缀名&#xff0c;否则 GitHub 将无法识别该文件为工作流程文件。这些工作流程文件可用于自动…

速锐得基于能源油气生产智能监控的物联网应用

自2016年速锐得基于商用车国六环保排放监控管理开发以来&#xff0c;我们同时也接触了很多涉及商用车领域的深入项目&#xff0c;包括了大庆油田、山东能源、兖矿集团、陕北矿业等多家能源巨头在数字化、科技、无线远程控制、监控管理、生产效能等方面的智能化方向的趋势。 就目…

MySQL 字段为 NULL 的5大坑,大部分人踩过

数据库字段允许空值(null)的问题&#xff0c;小伙伴你遇到过吗&#xff1f; 在验证问题之前&#xff0c;我们先建一张测试表及测试数据。 构建的测试数据&#xff0c;如下图所示&#xff1a; 有了上面的表及数据之后&#xff0c;我们就来看当列中存在 NULL 值时&#xff0c;究…

基于RGB-D的6D目标检测算法

基于RGB-D的6D目标检测算法 本文参考了ITAIC的文章 A Review of 6D Object Pose Estimation 概览 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eQX8ke6j-1683188966051)(https://mezereon-upic.oss-cn-shanghai.aliyuncs.com/uPic/image-20230420…

如何理解信息化、数字化和智能化的概念?一文给你解惑!

如何理解信息化、数字化和智能化的概念&#xff1f; 前两年流行“信息化”&#xff0c;网上铺天盖地都是关于“信息化”的文章&#xff0c;这两年开始流行起“数字化”&#xff0c;于是铺天盖地都是“数字化”的文章&#xff0c;最近又开始大谈“智能化”...... 但点开那些文…

常见的5种项目管理问题类型

项目管理的5大影响素&#xff1a;时间、范围、成本、风险、质量。项目经理需要对这些因素进行均衡考量&#xff0c;并根据需要略有侧重&#xff0c;进行整体把握&#xff0c;即我们常说的均衡型管理风格。而忽略任何一因素&#xff0c;都会对项目产生极大影响。 常见的项目管理…

医院导诊图怎么做?目前比较好用的医院导航地图是哪一款?

现在很多的大医院&#xff0c;不只是越建越高&#xff0c;面积也越来越大&#xff0c;同时医院内部按照门诊、住院、放射等不同功能划分的区域也是越来越多&#xff0c;走进这些“超级医院”就像走进了迷宫一样&#xff0c;如何促使病患走进医院后&#xff0c;能迅速找到要去的…

19C RAC主库 to RAC备库搭建adg报错ORA-16047(修改19C RAC DB_UNIQUE_NAME )

文章目录 前言一、问题描述二、修改DB_UNIQUE_NAME1.查看集群配置2.将hip40实例从集群中移除3.修改db_unique_name4.将hip40dg实例添加到集群资源中5.重新启动实例 三、19C RAC 密码文件替换 前言 主库环境是19C RAC备库环境也是19C RAC&#xff0c;主库到备库做adg&#xff0…

移动端动态开发能力的由来和流派

移动端动态化的由来 “动态化”并不是最近几年才产生的名词&#xff0c;而是从从互联网诞生的初期&#xff0c;这个词就已经出现了。大家所认知的早期互联网&#xff0c;其实就是各种各类的“动态网站”&#xff0c;内容数据和页面外观都不是固定的&#xff0c;都是随着服务器…

Bash脚本中的Sleep命令到底有何妙用?

在编写Bash脚本时&#xff0c;有时需要在程序执行过程中加入一些等待时间&#xff0c;例如等待某个操作完成或等待某个进程退出。此时可以使用sleep命令来实现。 sleep命令可以让脚本暂停执行一段时间&#xff0c;其基本语法为&#xff1a; sleep <seconds>其中&#xf…

细数【SD-WEBUI】的模型:谁是最适合的模型从哪里找到它们

文章目录 &#xff08;零&#xff09;前言&#xff08;一&#xff09;基础模型&#xff08;Stable-Diffusion模型&#xff09;&#xff08;1.1&#xff09;ChilloutMix&#xff08;仿真&#xff09;&#xff08;1.2&#xff09;BasilMix&#xff08;仿真&#xff09;&#xff0…

如何使用 Linux Cron Job 优化WP-Cron以获得更好的性能

在本教程中&#xff0c;我将向您展示如何通过在 Linux 上用 Crontab 替换默认的 WP-Cron 触发机制来优化 WordPress 性能。 WordPress 使用 WP-Cron 来运行计划任务&#xff0c;许多用户已经在使用。 但它的工作方式并不理想。 在每次页面加载时&#xff0c;WP-Cron 检查计划…

在Centos7上安装和配置canal

1. 在 MySQL 数据库中创建 Canal 账户并为其授权 在安装 Canal 前&#xff0c;你需要在 MySQL 数据库中创建一个用于 Canal 连接的账户&#xff0c;并为该账户授予必要的权限。 以下是在 MySQL 数据库中创建 Canal 账户并为其授权的步骤&#xff1a; 登录 MySQL 使用以下命令…

B019_子查询篇

2022-4-30 18:11:32 通过本章学习,您将可以: 描述子查询可以解决的问题。 定义子查询。 列出子查询的类型。 书写单行子查询和多行子查询 MEGER INTO的使用 WITH 子句🏆CHAPTER 12 Subqueries & Merge Statements子查询和合并语句 子查询——嵌套在另一个查询中的查…

MyBatis:使用代码整合

文章目录 MyBatis&#xff1a;Day 04框架1. 依赖&#xff1a;pom.xml2. 外部配置文件&#xff1a;db.properties3. 核心配置文件&#xff1a;mybatis-config.xml4. 实体类5. 接口&#xff1a;xxxMapper.java6. 实现类&#xff1a;xxxMapper.xml7. 测试 MyBatis&#xff1a;Day …

DTC 2023回顾丨基于数据复制技术的多写多读数据库集群解决方案

在不久前结束的2023 DTC数据技术嘉年华中国数据库创新论坛上&#xff0c;GBASE南大通用8s产品经理郭茁老师分享了GBase 8s《基于数据复制技术的多写多读数据库集群解决方案》。 今天带大家一同回顾下本次演讲。 海量数据的存储和运算是目前行业内面临的一个重要问题&#xff0…

真实logging的构建

import logging import os.path import timeimport colorlog from logging.handlers import RotatingFileHandlerdefault_formats {# 终端输出格式color_format: %(log_color)s%(asctime)s-%(name)s-%(filename)s-[line:%(lineno)d]-%(levelname)s-[log-messge]: %(message)s,…

【Hydro】半图解法调洪演算步骤,附Python代码

说明 半图解法计算步骤如下: (1)根据水位&#xff5e;库容关系、水位&#xff5e;泄流关系以及计算时段等绘制辅助曲线&#xff1b; (2)确定起调水位 Z 1 Z_1 Z1​及相应的 q 1 q_1 q1​、 V 1 V_1 V1​计算各时段平均入库流量 Q p Q_p Qp​&#xff1b; (3)在水位坐标轴上确定…

使OpenGauss支持Python3存储过程

目录 一、概述 二、编译opengauss支持Python3存储过程 三、还有问题 一、概述 OpenGauss是可以支持以Python2、3编写存储过程的&#xff0c;但是这个功能默认不开启&#xff0c;想要这个功能要自己编译源码&#xff0c;目前这部分源码感觉不够成熟&#xff0c;还有一些问题&…