基于Kettle开发的web版数据集成开源工具(data-integration)-部署篇

目录

  • 📚第一章 前言
    • 📗背景
    • 📗目的
    • 📗总体方向
  • 📚第二章 下载编译
    • 📗下载
    • 📗编译
  • 📚第三章 部署
    • 📗准备工作
      • 📕 安装数据库&redis&consul
      • 📕 修改配置文件的数据库、redis、consul信息
        • 📘 `/dataintegration-gateway/src/main/resources/application-local.yaml`修改用户认证服务SSO
    • 📗服务器-应用目录结构
    • 📗重新编译并上传jar包
    • 📗启动后台服务
      • 📕consul监控页面可以看到启动成功的服务
    • 📗前端部署
      • 📕编译
      • 📕nginx配置
      • 📕登录验证
  • ⁉️问题记录
    • ❓问题一:-cp方式启动报错:找不到类
      • ❗解决方式:直接jar包启动
    • ❓问题二:Failed to handle request....10200/api/dataintegration-common-sso-provider/oauth/token
      • ❕原因:hosts文件被注释掉了
      • ❗解决方式:取消注释,重启gateway服务
    • ❓问题三:新建集成操作报错
      • ❕原因:运行模块没启动成功导致的
      • ❗解决方式:正确应该启动的是`dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-executable.jar`

*️⃣主目录:ETL&ELT专栏

🔼下一集:基于Kettle开发的web版数据集成开源工具(data-integration)-介绍篇

📚第一章 前言

📗背景

在前面的ETL专栏中有提到,最近一直在寻找基于Kettle开发的web版开源工具,后面都放弃准备研究kettle源码了,结果遇到了一款,今天先来研究下Linux环境手动部署(官方给的都是docker方式部署,需要搭建docker、mvn、node、npm等环境,太复杂了!)
在这里插入图片描述

📗目的

本身公司有数据中台产品,只是需要Kettle任务绘制这一块内容

📗总体方向

参考该开源产品核心代码

📚第二章 下载编译

📗下载

下载地址:https://github.com/young-datafan-ooooo1/data-integration

📗编译

导入开发工具进行编译:

mvn clean install -Prelease  -Dcheckstyle.skip=true -Dmaven.test.skip=true -Dmaven.javadoc.skip=true

在这里插入图片描述
在这里插入图片描述

📚第三章 部署

📗准备工作

📕 安装数据库&redis&consul

  • 数据源:使用MySQL数据库,没有的自行安装(docker安装mysql-建议本地手动安装mysql,这是之前安装docker练手用的,需要可以参考),博主使用的是8.0版本,建库语句如下供参考
    CREATE DATABASE `dataintegration_db`;
    create user 'stelladp'@'%' identified by 'Renxiaozhao@2023';
    grant create,alter,drop,select,insert,update,delete,INDEX,REFERENCES on dataintegration_db.* to stelladp@'%';
    flush privileges; 
    
    在这里插入图片描述
  • 安装redis,可参照redis安装使用及告警处理
    在这里插入图片描述
  • 安装consul,参照Linux安装consul的两种方式(在线和离线)
    在这里插入图片描述

📕 修改配置文件的数据库、redis、consul信息

修改所有模块application-local.yamlbootstrap.yaml文件,涉及数据库、redis、consul的地方全都改掉
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

📘 /dataintegration-gateway/src/main/resources/application-local.yaml修改用户认证服务SSO

在这里插入图片描述

id: dataintegration-common-sso-provider
#uri: lb://dataintegration-common-sso-provider
uri: http://localhost:10217/oauth/

📗服务器-应用目录结构

├─data-integration
│  └─bin     --存放启停脚本
│  └─conf    --存放配置文件(暂未用到,直接使用的jar包中的脚本)
│  └─lib     --jar包文件
│  └─logs    --日志目录
│  └─ui      --前端部署文件

📗重新编译并上传jar包

修改完配置,重新编译项目,找到所有模块的target目录下的jar包(有兴趣的可以尝试修改pom.xml文件,统一打包到某一路径下),上传到服务器
在这里插入图片描述
在这里插入图片描述
订正:只需要provider目录下面的jar包和gateway的jar包
在这里插入图片描述
在这里插入图片描述

-rw-rw-r--. 1 opensource opensource  93704942 12 18:06 dataintegration-file-management-provider-1.0.0-SNAPSHOT.jar
-rw-rw-r--. 1 opensource opensource  66606827 12 18:04 dataintegration-gateway-1.0.0-SNAPSHOT.jar
-rw-rw-r--. 1 opensource opensource  55597256 12 18:04 dataintegration-group-provider-1.0.0-SNAPSHOT.jar
-rw-rw-r--. 1 opensource opensource 161231342 12 18:05 dataintegration-model-management-provider-1.0.0-SNAPSHOT.jar
-rw-rw-r--. 1 opensource opensource  55634210 12 18:03 dataintegration-project-provider-1.0.0-SNAPSHOT.jar
-rw-rw-r--. 1 opensource opensource 179893827 12 18:04 dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-biz.jar
-rw-rw-r--. 1 opensource opensource  71467663 12 18:05 dataintegration-sso-provider-1.0.0-SNAPSHOT.jar
-rw-rw-r--. 1 opensource opensource  63207137 12 18:05 dataintegration-sys-management-provider-1.0.0-SNAPSHOT.jar

📗启动后台服务

启动脚本如下:

#! /bin/bash
APP_LIB=/home/opensource/app/data-integration/lib
APP_LOGS=/home/opensource/app/data-integration/logs

echo "启动系统管理模块..................."
exec nohup java -jar ${APP_LIB}/dataintegration-sys-management-provider-1.0.0-SNAPSHOT.jar > ${APP_LOGS}/sys.log 2>&1 &

echo "启动分组管理模块..................."
exec nohup java -jar ${APP_LIB}/dataintegration-group-provider-1.0.0-SNAPSHOT.jar > ${APP_LOGS}/group.log 2>&1 &

echo "启动服务网关模块..................."
exec nohup java -jar ${APP_LIB}/dataintegration-gateway-1.0.0-SNAPSHOT.jar > ${APP_LOGS}/gateway.log 2>&1 &

echo "启动脚本管理模块..................."
exec nohup java -jar ${APP_LIB}/dataintegration-project-provider-1.0.0-SNAPSHOT.jar > ${APP_LOGS}/project.log 2>&1 &

echo "启动单点登录模块..................."
exec nohup java -jar ${APP_LIB}/dataintegration-sso-provider-1.0.0-SNAPSHOT.jar > ${APP_LOGS}/sso.log 2>&1 &

echo "启动模型管理模块..................."
exec nohup java -jar ${APP_LIB}/dataintegration-model-management-provider-1.0.0-SNAPSHOT.jar > ${APP_LOGS}/model.log 2>&1 &

echo "启动文件管理模块..................."
exec nohup java -jar ${APP_LIB}/dataintegration-file-management-provider-1.0.0-SNAPSHOT.jar > ${APP_LOGS}/file.log 2>&1 &

echo "启动数据集成运行模块..................."
#exec nohup java -jar ${APP_LIB}/dataintegration-run-management-provider-1.0.0-SNAPSHOT.jar  > ${APP_LOGS}/run.log 2>&1 &
#exec nohup java -jar ${APP_LIB}/dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-biz.jar  > ${APP_LOGS}/run.log 2>&1 &
exec nohup java -jar ${APP_LIB}/dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-executable.jar  > ${APP_LOGS}/run.log 2>&1 &

其中文件模块和运行模块启动失败,不知道有没有影响,先跳过不管,最后会统一放到问题记录章节处理
在这里插入图片描述
订正file服务需要hdfs等存储环境,启动失败只会影响涉及文件的任务无法使用,run服务启动失败,会导致页面报错,很多查询接口都会报错,按照上面的脚本启动应该没有问题,一开始启动失败是因为选错了jar
在这里插入图片描述

📕consul监控页面可以看到启动成功的服务

在这里插入图片描述
file服务忽略,正常应该有7个服务
在这里插入图片描述

📗前端部署

可参照smartKettle离线部署及问题记录中的前端部署章节,需要一些基础环境,这里不在赘述

📕编译

  • 博主使用的VSCode工具,导入前端项目,首先npm install
    在这里插入图片描述
  • 编译打包npm run build
    在这里插入图片描述
    在这里插入图片描述
  • dist目录对应就是部署文件
    在这里插入图片描述
  • 上传到服务器
    在这里插入图片描述

📕nginx配置

同样参照参照smartKettle离线部署及问题记录中的nginx配置章节,需要安装nginx,这里不在赘述

server {
    listen       8785;
    server_name  localhost;

    location / {
        root /home/opensource/app/data-integration/ui/dist;
        try_files $uri $uri/ /index.html;
        index  index.html index.htm;
    }
    location /cloud {
        alias /home/opensource/app/data-integration/ui/dist;
        index  index.html index.htm;
        try_files $uri $uri/ /cloud/index.html;     #4.重定向,内部文件的指向
    }

    location /api {
        proxy_pass http://localhost:10200/api/;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

📕登录验证

用户密码admin/Prime@2020,登录失败😭
在这里插入图片描述
错误原因参考下面的问题二,修复后可以正常登录
在这里插入图片描述
run服务启动成功后,也面正常展示
在这里插入图片描述

⁉️问题记录

❓问题一:-cp方式启动报错:找不到类

在这里插入图片描述

❗解决方式:直接jar包启动

在这里插入图片描述

❓问题二:Failed to handle request…10200/api/dataintegration-common-sso-provider/oauth/token

在这里插入图片描述

2024-01-02 16:37:16.466 [traceCode:] [reactor-http-epoll-8] ERROR c.y.g.c.g.GatewayJsonExceptionHandler - Failed to handle request ....10200/api/dataintegration-common-sso-provider/oauth/token]: Search domain query failed. Original hostname: 'localhost' failed to resolve 'localhost.localdomain' after 2 queries 
io.netty.resolver.dns.DnsResolveContext$SearchDomainUnknownHostException: Search domain query failed. Original hostname: 'localhost' failed to resolve 'localhost.localdomain' after 2 queries 
        at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1013)
        Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
        |_ checkpoint ⇢ springfox.boot.starter.autoconfigure.SwaggerUiWebFluxConfiguration$CustomWebFilter [DefaultWebFilterChain]
        |_ checkpoint ⇢ org.springframework.web.cors.reactive.CorsWebFilter [DefaultWebFilterChain]
        |_ checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
        |_ checkpoint ⇢ org.springframework.security.web.server.authorization.AuthorizationWebFilter [DefaultWebFilterChain]
        |_ checkpoint ⇢ org.springframework.security.web.server.authorization.ExceptionTranslationWebFilter [DefaultWebFilterChain]
        |_ checkpoint ⇢ org.springframework.security.web.server.authentication.logout.LogoutWebFilter [DefaultWebFilterChain]
        |_ checkpoint ⇢ org.springframework.security.web.server.savedrequest.ServerRequestCacheWebFilter [DefaultWebFilterChain]
        |_ checkpoint ⇢ org.springframework.security.web.server.context.SecurityContextServerWebExchangeWebFilter [DefaultWebFilterChain]
        |_ checkpoint ⇢ org.springframework.security.config.web.server.ServerHttpSecurity$OAuth2ResourceServerSpec$BearerTokenAuthenticationWebFilter [DefaultWebFilterChain]
        |_ checkpoint ⇢ org.springframework.security.web.server.context.ReactorContextWebFilter [DefaultWebFilterChain]
        |_ checkpoint ⇢ org.springframework.security.web.server.header.HttpHeaderWriterWebFilter [DefaultWebFilterChain]
        |_ checkpoint ⇢ org.springframework.security.config.web.server.ServerHttpSecurity$ServerWebExchangeReactorContextWebFilter [DefaultWebFilterChain]
        |_ checkpoint ⇢ org.springframework.security.web.server.WebFilterChainProxy [DefaultWebFilterChain]
        |_ checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]
        |_ checkpoint ⇢ HTTP POST "/api/dataintegration-common-sso-provider/oauth/token" [ExceptionHandlingWebHandler]
Stack trace:
                at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1013)
                at io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:966)
                at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:414)
                at io.netty.resolver.dns.DnsResolveContext.access$600(DnsResolveContext.java:63)
                at io.netty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:463)
                at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)
                at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:571)
                at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:550)
                at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)
                at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)
                at io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:609)
                at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:117)
                at io.netty.resolver.dns.DnsQueryContext.tryFailure(DnsQueryContext.java:225)
                at io.netty.resolver.dns.DnsQueryContext$4.run(DnsQueryContext.java:177)
                at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98)
                at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:170)
                at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
                at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
                at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:384)
                at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
                at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
                at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
                at java.lang.Thread.run(Thread.java:750)
Caused by: io.netty.resolver.dns.DnsNameResolverTimeoutException: [/114.114.114.114:53] query via UDP timed out after 5000 milliseconds (no stack trace available)
2024-01-02 16:38:14.771 [traceCode:] [scheduling-1] INFO  c.y.g.r.GatewayRateLimitSyncTask - start syncRateLimit ,规则记录数:0 ,耗时:33
2024-01-02 16:38:15.635 [traceCode:] [scheduling-1] INFO  c.y.g.route.GatewayRouteSyncTask - sta

❕原因:hosts文件被注释掉了

在这里插入图片描述

❗解决方式:取消注释,重启gateway服务

放开注释:
在这里插入图片描述
不要忘了重启gateway服务:

exec nohup java -jar /home/opensource/app/data-integration/lib/dataintegration-gateway-1.0.0-SNAPSHOT.jar > /home/opensource/app/data-integration/logs/gateway.log 2>&1 &

在这里插入图片描述

❓问题三:新建集成操作报错

在这里插入图片描述
在这里插入图片描述

❕原因:运行模块没启动成功导致的

查看gateway日志, dataintegration-di-run-management-provider没启动成功导致
在这里插入图片描述

  • dataintegration-run-management-provider-1.0.0-SNAPSHOT.jar 中没有主清单属性
    [opensource@bigdata02 logs]$ less run.log 
    nohup: 忽略输入
    /home/opensource/app/data-integration/lib/dataintegration-run-management-provider-1.0.0-SNAPSHOT.jar中没有主清单属性
    
    • 错误解释:缺少Main-Class属性
      在这里插入图片描述
  • 解决方式:启动dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-executable.jar
    在这里插入图片描述
    dataintegration-run-management-provider下面有三个jar包,真正配置DiRunManagementApplication的是dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-biz.jar结果走了弯路,实际应该启动的是dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-executable.jar
    在这里插入图片描述
    弯路从这开始…(又没选对启动jar包
    在这里插入图片描述
    在这里插入图片描述

❗解决方式:正确应该启动的是dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-executable.jar

正确应该是启动dataintegration-run-management-provider-1.0.0-SNAPSHOT-ark-executable.jar
在这里插入图片描述
启动成功后,页面正常
在这里插入图片描述

❓问题五:DiRunManagementApplication启动报错·Exception in thread “main” java.lang.NoClassDefFoundError: org/springframework/boot/builder/SpringApplicationBuilder

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/builder/SpringApplicationBuilder
        at com.youngdatafan.di.run.management.DiRunManagementApplication.main(DiRunManagementApplication.java:29)
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.builder.SpringApplicationBuilder
        at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)

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

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

相关文章

无法自动装配。找不到 ‘RabbitTemplate‘ 类型的 Bean

解决方案&#xff1a;把这个项目的spring-rabbit依赖的<scope>test</scope>删除并重新加载maven

从私有Git仓库的搭建到命令的使用及部署再到分支管理

一、版本控制系统/版本控制器 1. 版本控制系统&#xff1a; git 分布式 —没有中心代码库&#xff0c;所有机器之间的地位同等&#xff08;每台机器上都有相同的代码&#xff09; svn 集中管理的 —有中心代码库&#xff0c;其他都是客户端 2.git与svn介绍 1.git属于分布…

YOLOv8/v7/v5全网首发原创独家创新,内涵CBAM注意力改进、ECA改进,SPPF改进等

&#x1f4a1;&#x1f4a1;&#x1f4a1;全网独家首发创新&#xff08;原创&#xff09;&#xff0c;纯自研模块&#xff0c;适合paper &#xff01;&#xff01;&#xff01; &#x1f4a1;&#x1f4a1;&#x1f4a1;内涵CBAM注意力改进、ECA改进&#xff0c;SPPF改进等&am…

拼多多API:从数据中挖掘商业价值的力量

随着大数据时代的来临&#xff0c;数据已经成为企业决策和创新的基石。拼多多API作为电商领域的重要接口&#xff0c;为企业提供了从数据中挖掘商业价值的机会。通过拼多多API&#xff0c;企业可以获取丰富的用户数据、商品数据和交易数据&#xff0c;从而深入了解市场需求、优…

在视频号上开通店铺怎么样?全新带货平台,普通人最后的电商机会

我是王路飞。 好消息&#xff1a;现在视频号上也可以开店、带货、做电商了。 坏消息&#xff1a;有一定的门槛&#xff08;尤其是资金方面&#xff09;。 视频号小店代表的是“全村的希望”&#xff08;腾讯马老板在22年底内部员工大会上的发言内容&#xff09;&#xff0c;…

Hyperledger Fabric 权限策略和访问控制

访问控制是区块链网络十分重要的功能&#xff0c;负责控制某个身份在某个场景下是否允许采取某个操作&#xff08;如读写某个资源&#xff09;。 常见的访问控制模型包括强制访问控制&#xff08;Mandatory Access Control&#xff09;、自主访问控制&#xff08;Discretionar…

“感恩同行 年度回馈” 中国善网开展“优秀公益伙伴”征集活动

2024年1月5日-1月15日&#xff0c;中国善网正式开展为期10天的2023年度“优秀公益伙伴”征集活动&#xff0c;此征集活动主要面向中国善网所有的注册会员单位。光阴荏苒&#xff0c;时光流逝&#xff0c;回首中国善网现已成立七年之久&#xff0c;截止目前为止&#xff0c;中国…

OpenWrt智能路由器Wan PPPoE拨号配置方法

OpenWrt智能路由器的wan PPPoE拨号配置方法和我们常见的不太一样, 需要先找到wan网卡,然后将协议切换为 PPPoE然后才能看到输入上网账号和密码的地方. 首先登录路由器 http://openwrt.lan/ 然后找到 Network --> Interfaces 这里会显示你当前的路由器的所有接口, 选择 …

echarts设置tooltip的层级

echarts设置tooltip的层级 tooltip: {trigger: "axis",extraCssText: z-index:3, // 修改层级borderColor: "rgba(0, 170, 255)",}, 完整的option示例如下&#xff1a; option {tooltip: {trigger: "axis",extraCssText: z-index:3,axisPoin…

基于OpenCV的图像缩放

基础概念 缩放是将图像的尺寸变小或变大的过程&#xff0c;即减少或增加原图像数据的像素个数&#xff0c;或者说通过增加或删除像素点来改变图像的尺寸&#xff1b; 基本原理&#xff1a;将分辨率&#xff08;图片尺寸&#xff09;为(w,h)的图像&#xff0c;缩放后其图像分辨…

react中实现拓扑图

react中实现拓扑图关系图 需求echarts代码react代码 需求 项目中的原型图需要使用react实现一个拓扑图&#xff08;关系图&#xff09; 通过查找&#xff0c;找到了可以使用的类似的原型&#xff1a;以下图片地址。 通过项目需要以及修改&#xff0c;形成了下边的样式 echar…

java SSM社区文化服务管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM社区文化服务管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的 源代码和数据库&#xff0c;系统主…

【JAVA】throw 和 throws 的区别?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 throw&#xff1a; throws&#xff1a; 区别&#xff1a; 作用&#xff1a; 使用位置&#xff1a; 个数&#xff1a; 应…

pyqtgraph 教程

pyqtgraph 教程 简介 PyQtGraph 是一个用于科学和工程数据可视化的开源库&#xff0c;基于 PyQt 和 NumPy 构建而成。它提供了丰富的绘图工具和交互功能&#xff0c;可以用于创建高性能的实时数据图表、图像显示和信号处理应用。 以下是 PyQtGraph 的一些特点和功能&#xf…

迷你洗衣机哪个牌子好又实惠?全网目前口碑最好的迷你洗衣机推荐

随着大家工作的压力越来越大&#xff0c;下了班之后只能想躺平&#xff0c;在洗完澡之后看着还需要手洗的内衣裤真的很头疼。有些小伙伴还有会攒几天再丢进去洗衣机里面一起&#xff0c;而且这样子是非常不好的&#xff0c;用过的内衣裤长时间不清洗容易滋生细菌&#xff0c;而…

mysql最常见问题:允许远程访问和修改密码 的详细解决方法

目 录 一、不能通过navicat等数据库客户端远程访问 &#xff08;一&#xff09;问题 &#xff08;二&#xff09;解决方法&#xff1a;开启远程可访问 1、输入授权命令的方式 2、直接更改数据库中的用户表 二、修改数据库的密码 Mysq在Lin…

网络原理OSI

目录 一、应用层 1、功能 2、协议的分类 二、UDP原理&#xff08;传输层&#xff09; 1、协议端格式 2、格式解释 三、TCP原理&#xff08;传输层&#xff09; 1、协议端格式 2、长度 3、可靠传输 &#xff08;1&#xff09;确认应答 &#xff08;2&#xff09;超时…

学到了!微信这样回复客户既高效又方便!

对于企业来说&#xff0c;如何在微信上高效回复客户&#xff0c;提供良好的用户体验是很重要的。 但常常因为一人管理太多号&#xff0c;消息回复不过来&#xff1b;同时太多客户咨询&#xff0c;手忙脚乱&#xff1b;回复的话术让人感到不专业。 没关系&#xff0c;小编又办法…

STM32——通用定时器脉冲计数实验

1.脉冲计数实验原理 2.从模式配置结构体 typedef struct { uint32_t SlaveMode; /* 从模式选择 / uint32_t InputTrigger; / 输入触发源选择 / uint32_t TriggerPolarity; / 输入触发极性 / uint32_t TriggerPrescaler; / 输入触发预分频 / uint32_t TriggerFilter; / 输入滤波…

算法回忆录——排序

文章目录 1. 插入排序2. 选择排序3. 冒泡排序4. 希尔排序5. 归并排序6. 快速排序7. 堆排序8. 计数排序9. 桶排序10. 基数排序 1. 插入排序 分为两个序列&#xff0c;前面一个序列是排好序的&#xff0c;后面一个序列是未排好的。未排好的序列的第一个元素&#xff08;a&#x…