当前位置: 首页 > news >正文

一个从oracle使用spool导出数据到kadb的脚本

1. dump_data.sh调用sql_dump.sh导出数据

2. load_data.sh将导出的数据加载至KADB

1. dump_data.sh

#!/bin/bash
begin_time=$(date +%Y%m%d -d '-1 day')
end_time=$(date +%Y%m%d)
echo "数据导出日期:"$begin_time
echo "数据导出日期:"$begin_time >> .//log/dump_data_$begin_time.log
echo "数据导出终止日期:"$end_time
echo "数据导出终止日期:"$end_time >> .//log/dump_data_$begin_time.log
while read LINE
do
  echo "表名:"$LINE
  echo "表名:"$LINE >> .//log/dump_data_$begin_time.log
  echo "执行参数: 表名 导出类型 开始时间 结束时间: "$LINE $begin_time $end_time
  echo "执行参数: 表名 导出类型 开始时间 结束时间: "$LINE $begin_time $end_time >> .//log/dump_data_$begin_time.log
  echo "./sql_dump.sh $LINE $begin_time $end_time"
  echo [`date +%Y-%m-%d_%H:%M:%S`]"执行导出操作:./sql_dump.sh $LINE $begin_time $end_time"
  echo [`date +%Y-%m-%d_%H:%M:%S`]"执行导出操作:./sql_dump.sh $LINE $begin_time $end_time" >> .//log/dump_data_$begin_time.log
  while [[ 1==1 ]]
  do
    echo '检查当前export进程数......'
    echo '检查当前export进程数......' >> .//log/dump_data_$begin_time.log
    sleep 2 
    ips=`ps -ef | grep -v grep| grep sql_dump | wc -l`
    echo 当前export进程数: $ips
    echo 当前export进程数: $ips >> .//log/dump_data_$begin_time.log
    if [ ${ips} -ge 4 ];then
      sleep 2 
    else
      #nohup sh ./sql_dump.sh $LINE $begin_time $end_time > .//"${LINE%% *}_`date +%Y%m%d`".log 2>&1 &
      nohup sh ./sql_dump.sh $LINE $begin_time $end_time >> .//log/dump_data_$begin_time.log 2>&1 &
      break;
    fi
  done
done < table.lst
 

2. sql_dump.sh

test=$1
flag=$2
begin_time=$3
end_time=$4
line=`wc -l $test.sql | cut -d ' ' -f 1`
export line
#echo 表名:$test 导出类型:$flag 列数:$line
echo 表名:$test 导出类型:$flag 列数:$line >> .//log/dump_data_$begin_time.log
if [ $flag = 'E' ];then
#  echo 当前表导出类型:$flag
  #echo 当前表导出类型:$flag >> .//log/"${test}_$begin_time".log
  awk -v line="$line" 'BEGIN{sql="select "}{if(NR<line){if($2~/char/){sql='sql'"replace("$1",chr(10),'\'''\'')\n""||'\'''\''||"}else{sql='sql'$1"||'\'''\''||"}}else{if($2~/char/){sql='sql'"replace("$1",chr(10),'\'''\'')"}else{sql='sql'$1}}}END{print 'sql'" from ""'$test'"" where fd_ie_flag=""'\''""'$flag'""'\''"" and fd_cus_release_time >= to_date(""'\''""'$begin_time'""'\'','\''yyyymmdd'\'')"" and fd_cus_release_time < to_date(""'\''""'$end_time'""'\'','\''yyyymmdd'\'')"";"}' ${test}.sql > ${test}_E.out
  cat ${test}_E.out
#  echo [`date +%Y-%m-%d_%H:%M:%s`]..表$test开始导出数据
  echo [`date +%Y-%m-%d_%H:%M:%s`]..表$test开始导出数据 >> .//log/dump_data_$begin_time.log
sqlplus -s / as sysdba << EOF 
set trimspool on;
set heading off;
set term off;
set feedback off;
set echo off;
SET SQLPROMPT "";
SET NEWPAGE NONE;
spool /home/oracle/${test}_E_${begin_time}.txt
@ ${test}_E.out
spool off;
set SQLPROMPT "SQL>";
exit;
EOF
touch ${test}_E_${begin_time}.done
#  echo [`date +%Y-%m-%d_%H:%M:%s`]..表$test导出数据完成
  echo [`date +%Y-%m-%d_%H:%M:%s`]..表$test导出数据完成 >> .//log/dump_data_$begin_time.log
  chmod 777 /home/oracle/${test}_E_${begin_time}.txt
elif [ $flag = 'I' ];then
  echo 当前表导出类型:$flag
#  echo 当前表导出类型:$flag >> .//"${test}_$begin_time".log
  awk -v line="$line" 'BEGIN{sql="select "}{if(NR<line){if($2~/char/){sql='sql'"replace("$1",chr(10),'\'''\'')\n""||'\'''\''||"}else{sql='sql'$1"||'\'''\''||"}}else{if($2~/char/){sql='sql'"replace("$1",chr(10),'\'''\'')"}else{sql='sql'$1}}}END{print 'sql'" from ""'$test'"" where fd_ie_flag=""'\''""'$flag'""'\''"" and fd_cus_clear_time >= to_date(""'\''""'$begin_time'""'\'','\''yyyymmdd'\'')"" and fd_cus_clear_time < to_date(""'\''""'$end_time'""'\'','\''yyyymmdd'\'')"";"}' ${test}.sql > ${test}_I.out
  cat ${test}_I.out
#  echo [`date +%Y-%m-%d_%H:%M:%s`]..表$test开始导出数据
  echo [`date +%Y-%m-%d_%H:%M:%s`]..表$test开始导出数据 >> .//log/dump_data_$begin_time.log
sqlplus -s / as sysdba << EOF 
set trimspool on;
set heading off;
set term off;
set feedback off;
set echo off;
SET SQLPROMPT "";
SET NEWPAGE NONE;
spool /home/oracle/${test}_I_${begin_time}.txt
@ ${test}_I.out
spool off;
set SQLPROMPT "SQL>";
exit;
EOF
touch ${test}_I_${begin_time}.done
#  echo [`date +%Y-%m-%d_%H:%M:%s`]..表$test导出数据完成
  echo [`date +%Y-%m-%d_%H:%M:%s`]..表$test导出数据完成 >> .//log/dump_data_$begin_time.log
  chmod 777 /home/oracle/${test}_I_${begin_time}.txt
else
  echo 当前表导出类型:$flag
  echo 当前表导出类型:$flag >> .//"${test}_$begin_time".log
  awk -v line="$line" 'BEGIN{sql="select "}{if(NR<line){if($2~/char/){sql='sql'"replace("$1",chr(10),'\'''\'')\n""||'\'''\''||"}else{sql='sql'$1"||'\'''\''||"}}else{if($2~/char/){sql='sql'"replace("$1",chr(10),'\'''\'')"}else{sql='sql'$1}}}END{print 'sql'" from ""'$test'"" where fd_cus_release_time >= to_date(""'\''""'$begin_time'""'\'','\''yyyymmdd'\'')"" and fd_cus_release_time < to_date(""'\''""'$end_time'""'\'','\''yyyymmdd'\'')"";"}' ${test}.sql > ${test}.out
  cat ${test}.out
#  echo [`date +%Y-%m-%d_%H:%M:%s`]..表$test开始导出数据
  echo [`date +%Y-%m-%d_%H:%M:%s`]..表$test开始导出数据 .//log/dump_data_$begin_time.log
sqlplus -s / as sysdba << EOF 
set trimspool on;
set heading off;
set term off;
set feedback off;
set echo off;
SET SQLPROMPT "";
SET NEWPAGE NONE;
spool /home/oracle/${test}_${begin_time}.txt
@ $test.out
spool off;
set SQLPROMPT "SQL>";
exit;
EOF
touch ${test}_${begin_time}.done
#  echo [`date +%Y-%m-%d_%H:%M:%s`]..表$test导出数据完成
  echo [`date +%Y-%m-%d_%H:%M:%s`]..表$test导出数据完成 .//log/dump_data_$begin_time.log
  chmod 777 /home/oracle/${test}_${begin_time}.txt
fi
 

3. load_data.sh

#!/bin/bash
begin_time=$(date +%Y%m%d -d '-1 day')
end_time=$(date +%Y%m%d)
echo 导入开始日期: $begin_time
echo 导入结束日期: $end_time
WORKPATH=`dirname $0`

get_port()
{
  kbport=$1
  while [ $kbport -le 50000 ]   
  do
    /usr/sbin/lsof -i:$kbport > /dev/null
    if [ $? -eq 1 ]
    then
      echo $kbport
      break
    else
      let kbport+=2
    fi
  done
}

while read LINE
do
  #echo 表名: $LINE
  type=${LINE##* }
  if [ $type = 'O' ];then
    table_name=${LINE%% *}
  else
    table_name=${LINE%% *}_$type
  fi
  echo 待导入表: $table_name
  KB_PORT=`get_port 40000`        #获取gpfdist可用的端口
  while true
  do
    /usr/sbin/lsof -i:${KB_PORT} 
    if [ $? -eq 1 ]
    then
      if [ ! -d $WORKPATH/${KB_PORT} ]; 
      then
        mkdir $WORKPATH/${KB_PORT}
        if [ $? -ne 0 ];then
          echo $KB_PORT端口已经被使用
          let KB_PORT+=2
          KB_PORT=`get_port $KB_PORT`
          continue;
        fi
        if [[ "$table_name" =~ _I$ ]];then 
          table_name_r=${table_name%_*}
          echo $table_name_r
          sed -e "s#THISISDATADIRECTORY#\./${table_name}_${begin_time}.txt#g;s#zhuyongzhuyong#${table_name_r}#g;s/KBPORT/${KB_PORT}/g;s/EXECSQLSTAT/delete from ${table_name_r} where fd_ie_flag='I' and fd_cus_clear_time >= to_date('${begin_time}','yyyymmdd') and fd_cus_clear_time < to_date('${end_time}','yyyymmdd');/g" z.mod > $table_name.yml
          cat $table_name.yml
          break;
        elif [[ "$table_name" =~ _E$ ]]; then
          table_name_r=${table_name%_*}
          echo $table_name_r
          sed -e "s#THISISDATADIRECTORY#\./${table_name}_${begin_time}.txt#g;s#zhuyongzhuyong#${table_name_r}#g;s/KBPORT/${KB_PORT}/g;s/EXECSQLSTAT/delete from ${table_name_r} where fd_ie_flag='E' and fd_cus_release_time >= to_date('${begin_time}','yyyymmdd') and fd_cus_release_time < to_date('${end_time}','yyyymmdd');/g" z.mod > $table_name.yml
          cat $table_name.yml
          break;
        else
          echo $table_name
          sed -e "s#THISISDATADIRECTORY#\./${table_name}_${begin_time}.txt#g;s#zhuyongzhuyong#${table_name}#g;s/KBPORT/${KB_PORT}/g;s/EXECSQLSTAT/delete from ${table_name} where fd_cus_release_time >= to_date('${begin_time}','yyyymmdd') and fd_cus_release_time < to_date('${end_time}','yyyymmdd');/g" z.mod > $table_name.yml
          cat $table_name.yml
          break;
        fi
      else
        let KB_PORT+=2
         KB_PORT=`get_port $KB_PORT`
      fi 
    else
      sleep $(($RANDOM%5))
      let KB_PORT+=2      
      KB_PORT=`get_port $KB_PORT`  
    fi  
  done
  while true
  do
    if [ -f ${table_name}_${begin_time}.done ];then
      ips=`ps -ef | grep -v grep| grep sql_dump | wc -l`
      if [ ${ips} -ge 4 ];then
        sleep 2
      else
        echo "begin load"
        #echo "`date "+%Y-%m-%d_%H:%M:%S"`开始装载表:${table_name}"
        #nohup gpload -f $table_name.yml > ./log/gpload_$table_name_`date +%Y%m%d`.log &
        #grep "errors = [^0]\|failed\|ERROR" ./log/gpload_${table_name}_`date +%Y%m%d`.log > /dev/null    #检查gpload是否成功
        #if [ $? -eq 0 ]; then
    #  echo "GPLOAD ERROR!"
    #  echo $table_name >> ./log/error_`date +%Y%m%d`.lst
     #fi
        #echo "`date "+%Y-%m-%d_%H:%M:%S"`结束装载表:${table_name}"
        #ROWSLOAD=`cat $WORKPATH/load_log/gpload_${table_name}_$(date +%Y%m%d).log | grep "rows Inserted" | cut -d "=" -f 2 | sed 's/^ //'`    #获取装载数据行数
    #echo $ROWSLOAD
    #echo "`date "+%Y-%m-%d_%H:%M:%S"`本次装载数据${ROWSLOAD}行"
        rm -rf $WORKPATH/${KB_PORT}
        break;
      fi
    else
      echo ${table_name}_${begin_time}.txt have not done 
      sleep 10
      continue;
    fi
  done
done < table.lst


 

相关文章:

一个从oracle使用spool导出数据到kadb的脚本

1. dump_data.sh调用sql_dump.sh导出数据 2. load_data.sh将导出的数据加载至KADB 1. dump_data.sh #!/bin/bash begin_time$(date %Y%m%d -d -1 day) end_time$(date %Y%m%d) echo "数据导出日期:"$begin_time echo "数据导出日期:"$begin_time >>…...

两道数组有关的OJ练习题

系列文章目录 &#x1f388; &#x1f388; 我的CSDN主页:OTWOL的主页&#xff0c;欢迎&#xff01;&#xff01;&#xff01;&#x1f44b;&#x1f3fc;&#x1f44b;&#x1f3fc; &#x1f389;&#x1f389;我的C语言初阶合集&#xff1a;C语言初阶合集&#xff0c;希望能…...

仿闲鱼的二手交易小程序软件开发闲置物品回收平台系统源码

市场前景 闲置物品交易软件的市场前景广阔&#xff0c;主要基于以下几个方面的因素&#xff1a; 环保意识提升&#xff1a;随着人们环保意识的增强&#xff0c;越来越多的人开始关注资源的循环利用&#xff0c;闲置物品交易因此受到了广泛的关注。消费升级与时尚节奏加快&…...

uni-app使用组件button遇到的问题

在HBuilder X工具中新建一个空白项目&#xff0c; 1、新建一个about页 然后在pages.json文件里加上路由 2、然后看下导航的方法&#xff0c;发现找不到navigateTo方法 参考&#xff1a;button | uni-app官网 第3行和第4行的代码倒是没问题的&#xff0c;第5行的代码有问题执行…...

halcon单相机+机器人*眼在手外标定心得

目的 得到相机坐标系下的点与机器人底座base的转换关系&#xff0c;camera_in_base 两个不确定的定量 1&#xff0c;相机与机器人底座base之间的相对位置是固定的&#xff0c;既camera_in_base 2&#xff0c;机械手末端与标定物 tool_in_obj是固定的 辅助确定量 工作台与相…...

为什么在多数据源的情况下,单数据源的自动配置类会失效?

在 Spring Boot 中&#xff0c;DataSourceAutoConfiguration 是单数据源情况下的默认自动配置类。当引入多数据源方案&#xff08;例如 dynamic-datasource-spring-boot-starter&#xff09;后&#xff0c;单数据源的自动配置机制会失效&#xff0c;原因主要在于多数据源自动配…...

Y3编辑器教程8:资源管理器与存档、防作弊设置

文章目录 一、资源管理器简介1.1 界面介绍1.2 资源商店1.3 AI专区1.3.1 AI文生图1.3.2 AI图生图1.3.3 立绘头像 二、导入导出2.1 文件格式2.2 模型导入2.2.1 模型制作后导出2.2.2 模型文件导入Y3编辑器2.2.3 Y3编辑器角色、装饰物模型要求 2.3 纹理导入2.4 材质贴图2.4.1 材质支…...

域名劫持污染可以拦截吗?

在当今数字化的时代&#xff0c;互联网已经成为人们生活、工作和学习不可或缺的一部分。然而&#xff0c;网络世界并非一片净土&#xff0c;域名劫持污染这一威胁如同潜藏在暗处的 “幽灵”&#xff0c;时刻困扰着网络的安全与稳定&#xff0c;也引发了人们对于其是否可以被有效…...

解决“SVN无法上传或下载*.so、*.a等二进制文件“问题

今天&#xff0c;在使用Subversion提交代码到服务器时&#xff0c;发现无法提交*.a、*.so等二进制文件&#xff0c;右击这些文件&#xff0c;发现其属性为ignores。     问题原因&#xff1a;SVN的配置文件里&#xff0c;屏蔽了*.a、*.so文件的上传与下载&#xff0c;并把这些…...

2024年河北省职业院校技能大赛云计算应用赛项赛题第2套(私有云)

#需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包…...

登山第十六梯:深度恢复——解决机器人近视问题

文章目录 一 摘要 二 资源 三 内容 一 摘要 深度感知是基于 3D 视觉的机器人技术的一个重要问题。然而&#xff0c;现实世界的主动立体或 ToF 深度相机经常会产生嘈杂且深度不完整&#xff0c;从而成为机器人性能的瓶颈。在这项工作中&#xff0c;提出了 一个基于学习的立体…...

【自动驾驶】3 激光雷达③

5 激光雷达点云检测模型 &#x1f98b;&#x1f98b;&#x1f98b;CenterPoint是Anchor‐Free的3D物体检测器&#xff0c;以点云作为输入&#xff0c;将三维物体在Bird‐View下的中心点作为关键点&#xff0c;基于关键点检测的方式回归物体的尺寸、方向和速度。相比于Anchor‐…...

新手福音:有哪些比Zotero更友好的文献管理软件?

别找了&#xff0c;3个被夸上天的论文阅读神器&#xff0c;我都帮你测评好了&#xff0c;直接抄我作业&#xff01;&#xff01; Scholaread、Zotero和EndNote&#xff0c;这些工具在复杂的学术探索中给我点亮了一盏灯&#xff0c;那感觉棒极了&#xff01; 虽然每个工具都不…...

消费导刊杂志社消费导刊杂志消费导刊编辑部2024年第41期目录

征稿启事 封2 轻工艺术 浅谈青瓷创作中的艺术审美 周水淼1-4 浅谈木雕艺术在红木家具创作中的应用 蒋宝良5-8 浅谈对唐卡艺术高技能人才培养的必要性 夏吾他9-12 龙泉宝剑锻造技艺 叶明13-16 传承吸纳,创造吐新——论越窑青瓷新时代的传承和创新路径 盛海尧17-20 浅析龙泉哥窑艺…...

Datawhale-AI活动2024.12.24

目录 一、番茄时钟&#xff08;1&#xff09;输入Prompt&#xff08;2&#xff09;创建 HTML 文件解析1&#xff1a;HTML结构解析2&#xff1a;计时器内容解析3&#xff1a;按钮区域解析4&#xff1a;脚本引用 &#xff08;3&#xff09;使用JavaScript实现时钟功能解析1&#…...

揭秘:薪酬绩效管理咨询公司收费标准

在当今这个竞争激烈的商业环境中&#xff0c;企业的人力资源管理变得尤为重要&#xff0c;尤其是薪酬绩效管理体系的构建与优化。一个合理的薪酬绩效管理制度不仅能激发员工的积极性与创造力&#xff0c;还能帮助企业实现战略目标&#xff0c;提升整体竞争力。然而&#xff0c;…...

适用于机器视觉应用的智能机器视觉控制平台

工控机在机器视觉系统设计中是不可或缺的核心组件&#xff0c;在机器视觉中发挥着至关重要的作用&#xff0c;其强大的计算能力、高度的稳定性和可靠性、实时性以及图像处理和识别能力&#xff0c;为机器视觉检测提供了有力支持。 Nuvis系列机器视觉控制平台是适用于现如今机器…...

leetcode hot100 LRU缓存

146. LRU 缓存 已解答 中等 相关标签 相关企业 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&…...

什么是DDoS攻击?如何防范DDoS攻击?

定义 DDoS&#xff08;Distributed Denial of Service&#xff09;攻击全称为分布式拒绝服务攻击。它是一种恶意的网络攻击手段&#xff0c;攻击者通过控制大量的计算机&#xff08;这些计算机通常被称为“僵尸主机”或“肉鸡”&#xff09;&#xff0c;同时向目标服务器或网络…...

使用 Dash 构建交互式数据可视化应用

使用 Dash 构建交互式数据可视化应用 1. 什么是 Dash&#xff1f; Dash 是一个由 Plotly 开发的开源 Python 框架&#xff0c;用于快速构建交互式数据可视化应用。Dash 将前端&#xff08;HTML、CSS 和 JavaScript&#xff09;与后端&#xff08;Python&#xff09;无缝集成&…...

【Linux网络编程】第十五弹---传输层深度解析:端口号划分、UDP协议特性与TCP协议全面剖析(含连接管理、流量控制、拥塞控制等)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、传输层 1.1、再谈端口号 1.1.1、端口号范围划分 1.1.2、认识知名端口号 1.1.3、两个问题 1.2、UDP …...

SQL语句整理五-StarRocks

文章目录 查看版本号&#xff1a;SPLIT&#xff1a;insert 和 update 结合 select&#xff1a;报错&#xff1a;1064 - StarRocks planner use long time 3000 ms in memo phase&#xff1a;字段增删改&#xff1a; 查看版本号&#xff1a; select current_version(); current…...

【GIS教程】使用GDAL实现栅格转矢量(GeoJSON、Shapefile)- 附完整代码

文章目录 一、 应用场景1、GeoJSON2、ESRI Shapefile3、GDAL 二、基本思路1、数据准备2、重投影&#xff08;可选&#xff09;3、创建空的矢量图层4、栅格转矢量 三、完整代码四、总结五、拓展&#xff08;使用ArcGIS工具进行栅格转矢量&#xff09; 一、 应用场景 TIFF格式的…...

美国加州房价数据分析02

5. 特征工程 5.1重构数据集 承接上文提到的相似度排名&#xff0c;去掉部分无关的特征。 train_set.corr()["median_house_value"].sort_values(ascendingFalse)为了提高模型训练后的鲁棒性&#xff0c;即防止过拟合&#xff0c;不建议删除关联度最低几项特征&#…...

[安徽省赛 2021]misc签到

给了一个图片&#xff0c;改成jpg格式&#xff0c;查看属性 发现备注 this_is_password 这可能是密码什么东西的 把图片拉到kali里面用用工具binwalk工具分离 发现了flag.txt文件 把压缩包拉到windows系统中 解压&#xff0c;输入密码 得到flag NSSCTF{ab32056rfanla12380a…...

LeetCode:1705. 吃苹果的最大数目(优先级队列 + 贪心 Java)

目录 1705. 吃苹果的最大数目 题目描述&#xff1a; 实现代码与解析&#xff1a; 优先级队列 贪心 原理思路&#xff1a; 1705. 吃苹果的最大数目 题目描述&#xff1a; 有一棵特殊的苹果树&#xff0c;一连 n 天&#xff0c;每天都可以长出若干个苹果。在第 i 天&#x…...

MX3200显微尺寸测量仪

产品简介 MX3200显微尺寸测量仪将显微成像与传统影像测量相结合&#xff0c;实现了微小特征的大范围测量。配置电动塔台&#xff0c;可自动切换到不同的倍率&#xff0c;探测各种精密微观二维尺寸特征。尺寸测量功能丰富&#xff0c;可进行各种二维尺寸点、线、圆等的测量和形…...

VR 动感单车身心调适系统的功能与作用

如今&#xff0c;人们面临着来自各方的压力&#xff0c;国家重视国民身心健康&#xff0c;但人们在实际生活中却缺乏有效的身心调节方式。无论是久坐的白领&#xff0c;还是学业繁重的学生&#xff0c;都存在身体亚健康和心理压力大的问题。传统健身方式枯燥、心理咨询成本高且…...

LabVIEW伸缩臂参数监控系统

LabVIEW开发伸缩臂越野叉车参数监控系统主要应用于工程机械中的越野叉车&#xff0c;以提高车辆的作业效率和故障诊断能力。系统通过PEAK CAN硬件接口和LabVIEW软件平台实现对叉车作业参数的实时监控和故障分析&#xff0c;具有良好的实用性和推广价值。 系统组成 系统主要由P…...

Spring提供了很好事务管理机制

事务管理在系统开发中是不可缺少的一部分&#xff0c;Spring提供了很好事务管理机制 分类 主要分为编程式事务和声明式事务两种。 编程式事务 是指在代码中手动的管理事务的提交、回滚等操作&#xff0c;代码侵入性比较强&#xff0c;如下示例&#xff1a; try {//TODO so…...

Selenium 和 Playwright两大框架的不同之处

自动化测试工具百花齐放&#xff0c;其中 Selenium 和 Playwright 是两大热门框架&#xff0c;谁才是你的最佳选择&#xff1f;面对企业项目的真实需求&#xff0c;它们的差异究竟在哪儿&#xff1f; Selenium 和 Playwright 是两种流行的自动化测试工具&#xff0c;它们都被用…...

【计算机视觉】轮廓检测

一、轮廓检测 在计算机视觉中&#xff0c;轮廓检测是另一个比较重要的任务&#xff0c;不单是用来检测图像或者视频帧中物体的轮廓&#xff0c;而且还有其他操作与轮廓检测相关。 以下代码展示了如何使用 OpenCV 进行 图像阈值处理、寻找图像轮廓 和 绘制轮廓 的完整流程&…...

【Linux】深入Linux:GCC/G++编译器实用指南

Linux相关知识点可以通过点击以下链接进行学习一起加油&#xff01;初识指令指令进阶权限管理yum包管理与vim编辑器 在Linux系统中&#xff0c;理解和掌握GCC/G编译器是开发者不可或缺的技能之一。本文将深入探讨它们的工作原理和实际运用&#xff0c;帮助读者更好地利用这些强…...

【未来编程:AI如何通过合成复用原则优化设计】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 前言合成复用原则含义 继承复用含义UML图实现代码运行结果及分析优缺点 合成复用&#xff08;我有这…...

【Rust自学】5.3. struct的方法(Method)

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 5.3.1. 什么是方法(Method) 方法和函数类似&#xff0c;也是用fn关键字进行声明&#xff0c;方法也有名称&#xff0c;也有参数&#xff…...

单片机 STM32入门

一、什么是单片机 单片机&#xff08;Microcontroller Unit&#xff0c;MCU&#xff09;是一种集成电路芯片&#xff0c;它将计算机的CPU、存储器&#xff08;包括RAM和ROM&#xff09;、输入/输出接口等集成在一个芯片上。单片机通常用于嵌入式系统&#xff0c;能够执行特定的…...

OneCode:开启高效编程新时代——企业定制出码手册

一、概述 OneCode 的 DSM&#xff08;领域特定建模&#xff09;出码模块是一个强大的工具&#xff0c;它支持多种建模方式&#xff0c;并具有强大的模型转换与集成能力&#xff0c;能够提升开发效率和代码质量&#xff0c;同时方便团队协作与知识传承&#xff0c;还具备方便的仿…...

学python还是学java?哪个相对来说比较容易上手?

在比较Python和Java哪个更容易上手时&#xff0c;可以从多个维度进行分析&#xff0c;包括语法简洁性、学习资源、应用领域、学习曲线等。 一、语法简洁性 Python&#xff1a;Python的语法简洁明了&#xff0c;更接近自然语言&#xff0c;易于理解和记忆。它使用缩进来表示代…...

C语言项目 天天酷跑(上篇)

前言 这里讲述这个天天酷跑是怎么实现的&#xff0c;我会在天天酷跑的下篇添加源代码&#xff0c;这里会讲述天天酷跑这个项目是如何实现的每一个思路&#xff0c;都是作者自己学习于别人的代码而创作的项目和思路&#xff0c;这个代码和网上有些许不一样&#xff0c;因为掺杂了…...

Windows 11 安装 Dify 完整指南 非docker环境

# Windows 11 安装 Dify 完整指南## 前置要求- Python 3.11 - Node.js 18 - PostgreSQL 14 - Redis for Windows - Git - Ollama (可选&#xff0c;用于本地模型)## 详细安装步骤### 1. 安装必要软件1. **Python 3.11**- 从 https://www.python.org/downloads/release/python-…...

MySQL变量

文章目录 MySQL变量系统变量查看系统变量设置系统变量 自定义变量用户变量局部变量 MySQL变量 MySQL变量分为系统变量和自定义变量 系统变量 系统变量有全局变量和会话变量 查看系统变量 #查看全局系统变量 show global variables; #根据条件查询全局系统变量 show global …...

Ubuntu离线安装Docker容器

前言 使用安装的工具snap安装在沙箱中&#xff0c;并且该沙箱之外的权限有限。docker无法从其隔离的沙箱环境访问外部文件系统。 目录 前言准备环境卸载已安装的Docker环境快照安装的Dockerapt删除Docker 安装docker-compose下载执行文件将文件移到 /usr/local/bin赋予执行权限…...

ensp 关于acl的运用和讲解

ACL&#xff08;Access Control List&#xff0c;访问控制列表&#xff09;是一种常用于网络设备&#xff08;如路由器、交换机&#xff09;上的安全机制&#xff0c;用于控制数据包的流动与访问权限。ACL 可以指定哪些数据包允许进入或离开某个网络接口&#xff0c;基于不同的…...

Linux(Centos 7.6)yum源配置

yum是rpm包的管理工具&#xff0c;可以自动安装、升级、删除软件包的功能&#xff0c;可以自动解决软件包之间的依赖关系&#xff0c;使得用户更方便软件包的管理。要使用yum必须要进行配置&#xff0c;个人将其分为三类&#xff0c;本地yum源、局域网yum源、第三方yum源&#…...

[WASAPI]音频API:从Qt MultipleMedia走到WASAPI,相似与不同

[WASAPI] 从Qt MultipleMedia 来看WASAPI 最近在学习有关Windows上的音频驱动相关的知识&#xff0c;在正式开始说WASAPI之前&#xff0c;我想先说一说Qt的Multiple Media&#xff0c;为什么呢&#xff1f;因为Qt的MultipleMedia实际上是WASAPI的一层封装&#xff0c;它在是线…...

什么是MVCC?

MVCC&#xff08;多版本并发控制&#xff0c;Multi-Version Concurrency Control&#xff09;是一种用于数据库管理系统中的并发控制的技术。它允许多个事务同时对同一数据进行读取和修改&#xff0c;而不会相互干扰&#xff0c;从而提高了数据库的并发性能。以下是对MVCC的详细…...

C/C++基础错题归纳

文章目录 第1天1.下面程序段的运行结果是&#xff1a;答案知识补充 2.当一个类A 中没有声明任何成员变量与成员函数,这时sizeof(A)的值是多少&#xff1f;答案知识补充 3.下面程序输出是什么?答案其他讲解 第1天 1.下面程序段的运行结果是&#xff1a; char C[5]{‘a’,’b’…...

Nginx 常用安全头

Web 应用中配置 HTTP 安全响应头是提升网站安全性的重要一步。合理配置 Nginx 的安全头&#xff0c;可以抵御常见的安全威胁&#xff08;如 XSS、点击劫持、MIME 类型嗅探等&#xff09;&#xff0c;增强用户隐私保护和传输安全性。 常见的 HTTP 安全头及其作用 1. Content-Se…...

消息队列(一)消息队列的工作流程

什么是消息队列 首先&#xff0c;代入一个场景&#xff0c;我现在做一个多系统的集成&#xff0c;分别有系统A、B、C、D四个系统&#xff0c;A系统因为使用产生了业务数据&#xff0c;B、C、D需要使用这些数据做相关的业务处理和运算&#xff0c;最基本的做法就是通过接口通信…...

LeetCode 2605 从两个数字数组里生成最小数字

探寻两个数组数位关联下的最小数字问题 题目描述 给定两个只包含 1 到 9 之间数字的数组 nums1 和 nums2&#xff0c;并且每个数组中的元素都是互不相同的。我们需要返回最小的数字&#xff0c;要求这个数字满足两个数组都至少包含这个数字的某个数位。例如&#xff0c;若 nu…...