如何将 XxlJob 集成达梦数据库

news2024/11/26 10:38:52

 1. 前言

在某些情况下,你的项目可能会面临数据库选择的特殊要求,随着国产化的不断推进,达梦数据库是一个常见的选择。本篇博客将教你如何解决 XxlJob 与达梦数据库之间的 SQL 兼容性问题,以便你的任务调度系统能够在这个数据库中正常运行。

 2. 集成 XxlJob

 2.1 相关版本

首先,确保你使用的 XxlJob 版本与本文中的示例相匹配。本示例使用 XxlJob-Admin 2.4.0 版本。你可以从官方网站或 GitHub 上下载相应的版本。

Gitee地址
Github地址

 2.2 添加达梦数据库驱动

你需要添加达梦数据库的 JDBC 驱动到项目的 Maven 依赖中。以下是一个示例 Maven 依赖,确保它与你的达梦数据库版本兼容:

		<dependency>
			<groupId>com.dm</groupId>
			<artifactId>DmJdbcDriver</artifactId>
			<version>1.8.0</version>
		</dependency>

更建议去mvn仓库找寻你需要的链接依赖(或者达梦官方技术文档里也有)

2.3 配置数据库连接

在项目的配置文件中,配置达梦数据库的连接信息,包括 URL、用户名和密码。确保将这些信息配置为你的达梦数据库的实际连接信息。

spring.datasource.url=jdbc:dm://localhost:5236
spring.datasource.username=SYSDBA
spring.datasource.password=你的密码
spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver

2.4 初始化数据库表

XxlJob 需要一组特定的数据库表来存储任务信息和调度信息。你可以使用提供的 SQL 脚本初始化这些表。以下是 SQL 脚本的示例:

CREATE TABLE "SHENG"."XXL_JOB_USER"
(
 "ID" BIGINT IDENTITY(1,1) NOT NULL,
 "USERNAME" VARCHAR(50) NOT NULL,
 "PASSWORD" VARCHAR(50) NOT NULL,
 "ROLE" NUMBER(4,0) NOT NULL,
 "PERMISSION" VARCHAR(255) DEFAULT NULL
 NULL
);

CREATE TABLE "SHENG"."XXL_JOB_REGISTRY"
(
 "ID" BIGINT IDENTITY(1,1) NOT NULL,
 "REGISTRY_GROUP" VARCHAR(50) NOT NULL,
 "REGISTRY_KEY" VARCHAR(255) NOT NULL,
 "REGISTRY_VALUE" VARCHAR(255) NOT NULL,
 "UPDATE_TIME" TIMESTAMP(6) NULL
);

CREATE TABLE "SHENG"."XXL_JOB_LOGGLUE"
(
 "ID" BIGINT IDENTITY(1,1) NOT NULL,
 "JOB_ID" NUMBER(11,0) NOT NULL,
 "GLUE_TYPE" VARCHAR(50) DEFAULT NULL
 NULL,
 "GLUE_SOURCE" TEXT NULL,
 "GLUE_REMARK" VARCHAR(128) NOT NULL,
 "ADD_TIME" TIMESTAMP(6) NULL,
 "UPDATE_TIME" TIMESTAMP(6) NULL
);

CREATE TABLE "SHENG"."XXL_JOB_LOG_REPORT"
(
 "ID" BIGINT IDENTITY(1,1) NOT NULL,
 "TRIGGER_DAY" TIMESTAMP(6) NULL,
 "RUNNING_COUNT" NUMBER(11,0) DEFAULT '0'
 NOT NULL,
 "SUC_COUNT" NUMBER(11,0) DEFAULT '0'
 NOT NULL,
 "FAIL_COUNT" NUMBER(11,0) DEFAULT '0'
 NOT NULL,
 "UPDATE_TIME" TIMESTAMP(6) NULL
);

CREATE TABLE "SHENG"."XXL_JOB_LOG"
(
 "ID" BIGINT IDENTITY(1,1) NOT NULL,
 "JOB_GROUP" NUMBER(11,0) NOT NULL,
 "JOB_ID" NUMBER(11,0) NOT NULL,
 "EXECUTOR_ADDRESS" VARCHAR(255) NULL,
 "EXECUTOR_HANDLER" VARCHAR(255) NULL,
 "EXECUTOR_PARAM" VARCHAR(512) NULL,
 "EXECUTOR_SHARDING_PARAM" VARCHAR(20) NULL,
 "EXECUTOR_FAIL_RETRY_COUNT" NUMBER(11,0) DEFAULT '0'
 NOT NULL,
 "TRIGGER_TIME" TIMESTAMP(6) NULL,
 "TRIGGER_CODE" NUMBER(11,0) NOT NULL,
 "TRIGGER_MSG" CLOB NULL,
 "HANDLE_TIME" TIMESTAMP(6) NULL,
 "HANDLE_CODE" NUMBER(11,0) NOT NULL,
 "HANDLE_MSG" CLOB NULL,
 "ALARM_STATUS" NUMBER(4,0) DEFAULT '0'
 NOT NULL
);

CREATE TABLE "SHENG"."XXL_JOB_LOCK"
(
 "LOCK_NAME" VARCHAR(50) NOT NULL
);

CREATE TABLE "SHENG"."XXL_JOB_INFO"
(
 "ID" BIGINT IDENTITY(1,1) NOT NULL,
 "JOB_GROUP" NUMBER(11,0) NOT NULL,
 "JOB_DESC" VARCHAR(255) NOT NULL,
 "ADD_TIME" TIMESTAMP(6) NULL,
 "UPDATE_TIME" TIMESTAMP(6) NULL,
 "AUTHOR" VARCHAR(64) NULL,
 "ALARM_EMAIL" VARCHAR(255) NULL,
 "SCHEDULE_TYPE" VARCHAR(50) DEFAULT 'NONE'
 NOT NULL,
 "SCHEDULE_CONF" VARCHAR(128) NULL,
 "MISFIRE_STRATEGY" VARCHAR(50) DEFAULT 'DO_NOTHING'
 NOT NULL,
 "EXECUTOR_ROUTE_STRATEGY" VARCHAR(50) NULL,
 "EXECUTOR_HANDLER" VARCHAR(255) NULL,
 "EXECUTOR_PARAM" VARCHAR(512) NULL,
 "EXECUTOR_BLOCK_STRATEGY" VARCHAR(50) NULL,
 "EXECUTOR_TIMEOUT" NUMBER(11,0) DEFAULT '0'
 NOT NULL,
 "EXECUTOR_FAIL_RETRY_COUNT" NUMBER(11,0) DEFAULT '0'
 NOT NULL,
 "GLUE_TYPE" VARCHAR(50) NOT NULL,
 "GLUE_SOURCE" TEXT NULL,
 "GLUE_REMARK" VARCHAR(128) NULL,
 "GLUE_UPDATETIME" TIMESTAMP(6) NULL,
 "CHILD_JOBID" VARCHAR(255) NULL,
 "TRIGGER_STATUS" NUMBER(4,0) DEFAULT '0'
 NOT NULL,
 "TRIGGER_LAST_TIME" NUMBER(13,0) DEFAULT '0'
 NOT NULL,
 "TRIGGER_NEXT_TIME" NUMBER(13,0) DEFAULT '0'
 NOT NULL
);

CREATE TABLE "SHENG"."XXL_JOB_GROUP"
(
 "ID" BIGINT IDENTITY(1,1) NOT NULL,
 "APP_NAME" VARCHAR(64) NOT NULL,
 "TITLE" VARCHAR(50) NOT NULL,
 "ADDRESS_TYPE" NUMBER(4,0) DEFAULT '0'
 NOT NULL,
 "ADDRESS_LIST" TEXT NULL,
 "UPDATE_TIME" TIMESTAMP(6) NULL
);

SET IDENTITY_INSERT "SHENG"."XXL_JOB_GROUP" ON;
INSERT INTO "SHENG"."XXL_JOB_GROUP"("ID","APP_NAME","TITLE","ADDRESS_TYPE","ADDRESS_LIST","UPDATE_TIME") VALUES(1,'xxl-job-executor-sample','示例执行器',0,null,'2023-11-02 17:28:36.084000');
INSERT INTO "SHENG"."XXL_JOB_GROUP"("ID","APP_NAME","TITLE","ADDRESS_TYPE","ADDRESS_LIST","UPDATE_TIME") VALUES(2,'lpsHandler','lpsHandler',0,null,'2023-11-02 17:28:36.083000');

SET IDENTITY_INSERT "SHENG"."XXL_JOB_GROUP" OFF;
SET IDENTITY_INSERT "SHENG"."XXL_JOB_INFO" ON;
INSERT INTO "SHENG"."XXL_JOB_INFO"("ID","JOB_GROUP","JOB_DESC","ADD_TIME","UPDATE_TIME","AUTHOR","ALARM_EMAIL","SCHEDULE_TYPE","SCHEDULE_CONF","MISFIRE_STRATEGY","EXECUTOR_ROUTE_STRATEGY","EXECUTOR_HANDLER","EXECUTOR_PARAM","EXECUTOR_BLOCK_STRATEGY","EXECUTOR_TIMEOUT","EXECUTOR_FAIL_RETRY_COUNT","GLUE_TYPE","GLUE_SOURCE","GLUE_REMARK","GLUE_UPDATETIME","CHILD_JOBID","TRIGGER_STATUS","TRIGGER_LAST_TIME","TRIGGER_NEXT_TIME") VALUES(1,1,'测试任务1','2018-11-03 22:21:31.000000','2018-11-03 22:21:31.000000','XXL','','CRON','0 0 0 * * ? *','DO_NOTHING','FIRST','demoJobHandler','','SERIAL_EXECUTION',0,0,'BEAN','','GLUE代码初始化','2018-11-03 22:21:31.000000','',0,0,0);
INSERT INTO "SHENG"."XXL_JOB_INFO"("ID","JOB_GROUP","JOB_DESC","ADD_TIME","UPDATE_TIME","AUTHOR","ALARM_EMAIL","SCHEDULE_TYPE","SCHEDULE_CONF","MISFIRE_STRATEGY","EXECUTOR_ROUTE_STRATEGY","EXECUTOR_HANDLER","EXECUTOR_PARAM","EXECUTOR_BLOCK_STRATEGY","EXECUTOR_TIMEOUT","EXECUTOR_FAIL_RETRY_COUNT","GLUE_TYPE","GLUE_SOURCE","GLUE_REMARK","GLUE_UPDATETIME","CHILD_JOBID","TRIGGER_STATUS","TRIGGER_LAST_TIME","TRIGGER_NEXT_TIME") VALUES(3,2,'lpsHandler','2023-11-02 17:19:53.438000','2023-11-02 17:28:25.716000','刘品水','','CRON','0/1 * * * * ? ','DO_NOTHING','FIRST','lpsHandler','','SERIAL_EXECUTION',0,0,'BEAN','','GLUE代码初始化','2023-11-02 17:19:53.438000','',1,1698917841000,1698917842000);

SET IDENTITY_INSERT "SHENG"."XXL_JOB_INFO" OFF;
INSERT INTO "SHENG"."XXL_JOB_LOCK"("LOCK_NAME") VALUES('schedule_lock');

SET IDENTITY_INSERT "SHENG"."XXL_JOB_LOG" ON;
INSERT INTO "SHENG"."XXL_JOB_LOG"("ID","JOB_GROUP","JOB_ID","EXECUTOR_ADDRESS","EXECUTOR_HANDLER","EXECUTOR_PARAM","EXECUTOR_SHARDING_PARAM","EXECUTOR_FAIL_RETRY_COUNT","TRIGGER_TIME","TRIGGER_CODE","TRIGGER_MSG","HANDLE_TIME","HANDLE_CODE","HANDLE_MSG","ALARM_STATUS") VALUES(13,2,3,null,'lpsHandler','',null,0,'2023-11-02 17:20:25.518000',500,'任务触发类型:手动触发<br>调度机器:192.168.55.2<br>执行器-注册方式:自动注册<br>执行器-地址列表:null<br>路由策略:第一个<br>阻塞处理策略:单机串行<br>任务超时时间:0<br>失败重试次数:0<br><br><span style="color:#00c0ef;" > >>>>>>>>>>>触发调度<<<<<<<<<<< </span><br>调度失败:执行器地址为空<br><br>',null,0,null,2);

SET IDENTITY_INSERT "SHENG"."XXL_JOB_LOG" OFF;
SET IDENTITY_INSERT "SHENG"."XXL_JOB_LOG_REPORT" ON;
INSERT INTO "SHENG"."XXL_JOB_LOG_REPORT"("ID","TRIGGER_DAY","RUNNING_COUNT","SUC_COUNT","FAIL_COUNT","UPDATE_TIME") VALUES(1,'2023-11-02 00:00:00.000000',0,0,113,null);
INSERT INTO "SHENG"."XXL_JOB_LOG_REPORT"("ID","TRIGGER_DAY","RUNNING_COUNT","SUC_COUNT","FAIL_COUNT","UPDATE_TIME") VALUES(2,'2023-11-01 00:00:00.000000',0,0,0,null);
INSERT INTO "SHENG"."XXL_JOB_LOG_REPORT"("ID","TRIGGER_DAY","RUNNING_COUNT","SUC_COUNT","FAIL_COUNT","UPDATE_TIME") VALUES(3,'2023-10-31 00:00:00.000000',0,0,0,null);

SET IDENTITY_INSERT "SHENG"."XXL_JOB_LOG_REPORT" OFF;
SET IDENTITY_INSERT "SHENG"."XXL_JOB_LOGGLUE" ON;
SET IDENTITY_INSERT "SHENG"."XXL_JOB_LOGGLUE" OFF;
SET IDENTITY_INSERT "SHENG"."XXL_JOB_REGISTRY" ON;
SET IDENTITY_INSERT "SHENG"."XXL_JOB_REGISTRY" OFF;
SET IDENTITY_INSERT "SHENG"."XXL_JOB_USER" ON;
INSERT INTO "SHENG"."XXL_JOB_USER"("ID","USERNAME","PASSWORD","ROLE","PERMISSION") VALUES(1,'admin','e10adc3949ba59abbe56e057f20f883e',1,null);

SET IDENTITY_INSERT "SHENG"."XXL_JOB_USER" OFF;
ALTER TABLE "SHENG"."XXL_JOB_USER" ADD CONSTRAINT  PRIMARY KEY("ID") ;

ALTER TABLE "SHENG"."XXL_JOB_REGISTRY" ADD CONSTRAINT  PRIMARY KEY("ID") ;

ALTER TABLE "SHENG"."XXL_JOB_LOGGLUE" ADD CONSTRAINT  PRIMARY KEY("ID") ;

ALTER TABLE "SHENG"."XXL_JOB_LOG_REPORT" ADD CONSTRAINT  PRIMARY KEY("ID") ;

ALTER TABLE "SHENG"."XXL_JOB_LOG_REPORT" ADD CONSTRAINT "I_TRIGGER_DAY" UNIQUE("TRIGGER_DAY") ;

ALTER TABLE "SHENG"."XXL_JOB_LOG" ADD CONSTRAINT  PRIMARY KEY("ID") ;

ALTER TABLE "SHENG"."XXL_JOB_LOCK" ADD CONSTRAINT  PRIMARY KEY("LOCK_NAME") ;

ALTER TABLE "SHENG"."XXL_JOB_INFO" ADD CONSTRAINT  PRIMARY KEY("ID") ;

ALTER TABLE "SHENG"."XXL_JOB_GROUP" ADD CONSTRAINT  PRIMARY KEY("ID") ;

CREATE UNIQUE INDEX "I_USERNAME"
ON "SHENG"."XXL_JOB_USER"("USERNAME");

CREATE INDEX "I_G_K_V"
ON "SHENG"."XXL_JOB_REGISTRY"("REGISTRY_GROUP","REGISTRY_KEY","REGISTRY_VALUE");

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOGGLUE"."JOB_ID" IS '任务,主键ID';

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOGGLUE"."GLUE_TYPE" IS 'GLUE类型';

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOGGLUE"."GLUE_SOURCE" IS 'GLUE源代码';

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOGGLUE"."GLUE_REMARK" IS 'GLUE备注';

CREATE INDEX "I_TRIGGER_TIME"
ON "SHENG"."XXL_JOB_LOG"("TRIGGER_TIME");

CREATE INDEX "I_HANDLE_CODE"
ON "SHENG"."XXL_JOB_LOG"("HANDLE_CODE");

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."ID" IS '主键ID';

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."JOB_GROUP" IS '执行器主键ID';

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."JOB_ID" IS '任务,主键ID';

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."EXECUTOR_ADDRESS" IS '执行器地址,本次执行的地址';

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."EXECUTOR_HANDLER" IS '执行器任务handler';

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."EXECUTOR_PARAM" IS '执行器任务参数';

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."EXECUTOR_SHARDING_PARAM" IS '执行器任务分片参数,格式如 1/2';

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."EXECUTOR_FAIL_RETRY_COUNT" IS '失败重试次数';

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."TRIGGER_TIME" IS '调度-时间';

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."TRIGGER_CODE" IS '调度-结果';

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."TRIGGER_MSG" IS '调度-日志';

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."HANDLE_TIME" IS '执行-时间';

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."HANDLE_CODE" IS '执行-状态';

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."HANDLE_MSG" IS '执行-日志';

COMMENT ON COLUMN "SHENG"."XXL_JOB_LOG"."ALARM_STATUS" IS '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."JOB_DESC" IS '任务描述';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."SCHEDULE_TYPE" IS '调度类型';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."SCHEDULE_CONF" IS '调度配置,值含义取决于调度类型';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."MISFIRE_STRATEGY" IS '调度过期策略';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."EXECUTOR_ROUTE_STRATEGY" IS '执行器路由策略';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."EXECUTOR_HANDLER" IS '执行器任务handler';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."EXECUTOR_PARAM" IS '执行器任务参数';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."EXECUTOR_BLOCK_STRATEGY" IS '阻塞处理策略';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."EXECUTOR_TIMEOUT" IS '任务执行超时时间,单位秒';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."EXECUTOR_FAIL_RETRY_COUNT" IS '失败重试次数';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."GLUE_TYPE" IS 'GLUE类型';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."GLUE_SOURCE" IS 'GLUE源代码';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."GLUE_REMARK" IS 'GLUE备注';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."GLUE_UPDATETIME" IS 'GLUE更新时间';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."CHILD_JOBID" IS '子任务ID,多个逗号分隔';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."TRIGGER_STATUS" IS '调度状态:0-停止,1-运行';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."TRIGGER_LAST_TIME" IS '上次调度时间';

COMMENT ON COLUMN "SHENG"."XXL_JOB_INFO"."TRIGGER_NEXT_TIME" IS '下次调度时间';

COMMENT ON COLUMN "SHENG"."XXL_JOB_GROUP"."APP_NAME" IS '执行器AppName';

COMMENT ON COLUMN "SHENG"."XXL_JOB_GROUP"."TITLE" IS '执行器名称';

COMMENT ON COLUMN "SHENG"."XXL_JOB_GROUP"."ADDRESS_TYPE" IS '执行器地址类型:0=自动注册、1=手动录入';

COMMENT ON COLUMN "SHENG"."XXL_JOB_GROUP"."ADDRESS_LIST" IS '执行器地址列表,多地址逗号分隔';

以上 SQL 脚本中包括了创建必需的表和插入默认登录账号。注意,你可以根据自己的需求自定义这些表。

 2.5 更新 XML文件XxlJobLogMapper.xml&&XxlJobRegistryMapper.xml

XxlJob 与达梦数据库之间存在 SQL 兼容性问题,因此需要对 XxlJob 的 SQL 映射进行修改。以下是 XML的示例修改,确保 XxlJob 能够在达梦数据库中正常运行:

XxlJobLogMapper.xml

	<select id="findFailJobLogIds" resultType="long" >
		SELECT ID FROM SHENG.XXL_JOB_LOG
		WHERE NOT (
				(TRIGGER_CODE IN (0, 200) AND HANDLE_CODE = 0)
				OR
				(HANDLE_CODE = 200)
			)
		  AND ALARM_STATUS = 0
		ORDER BY ID ASC
			LIMIT #{pagesize}
	</select>

XxlJobRegistryMapper.xml

	<select id="findDead" parameterType="java.util.HashMap" resultType="java.lang.Integer" >
		SELECT t.ID
		FROM SHENG.XXL_JOB_REGISTRY t
		WHERE t.UPDATE_TIME &lt; DATEADD(SECOND, -#{timeout} , #{nowTime})
	</select>
	<select id="findAll" parameterType="java.util.HashMap" resultMap="XxlJobRegistry">

		SELECT <include refid="Base_Column_List" />
		FROM SHENG.XXL_JOB_REGISTRY t
		WHERE t.UPDATE_TIME &lt; DATEADD(SECOND, -#{timeout} , #{nowTime})
	</select>

 2.6 运行 XxlJob

现在,你可以启动 XxlJob 服务,它将连接到达梦数据库并开始正常运行。确保你的配置和数据库初始化都已经完成。

 3. 总结

通过按照上述步骤将 XxlJob 集成到达梦数据库中,你可以解决 SQL 兼容性问题,确保任务调度系统在达梦数据库中正常运行。在选择数据库时,始终考虑到项目需求、性能和兼容性,以便做出明智的选择。

这些步骤应该为你提供了成功集成 XxlJob 和达梦数据库所需的指导。祝你的任务调度系统顺利运行!如果你遇到问题 评论区留言 我看到都会帮着解决的~

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

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

相关文章

NNDL 作业6 卷积

一、概念 &#xff08;一&#xff09;卷积 &#xff08;1&#xff09;什么叫卷积 卷积、旋积或褶积(英语&#xff1a;Convolution)是通过两个函数f和g生成第三个函数的一种数学运算&#xff0c;其本质是一种特殊的积分变换&#xff0c;描述一个函数和另一个函数在某个维度上…

类和对象解析

导言&#xff1a; Java是一门纯面向对象的语言&#xff0c;在面对对象的世界里&#xff0c;一切皆为对象。而对象的创建又和类的定义息息相关。本文主要阐述了类和对象的使用与理解。解释类的定义方式以及对象的实例化&#xff0c;类中的成员变量和成员方法的使用&#xff0c;…

【qemu逃逸】D3CTF2021-d3dev

前言 题目给的是一个 docker 环境&#xff0c;所以起环境非常方便&#xff0c;但是该怎么调试呢&#xff1f;有无佬教教怎么在 docker 中调试&#xff1f; 我本来想着直接起一个环境进行调试&#xff0c;但是缺了好的库&#xff0c;所以就算了&#xff0c;毕竟本题也不用咋调…

044_第三代软件开发-保存PDF

第三代软件开发-保存PDF 文章目录 第三代软件开发-保存PDF项目介绍保存PDF头文件源文件使用 关键字&#xff1a; Qt、 Qml、 pdf、 painter、 打印 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Language&#xff…

阿里5年经验之谈 —— 记录一次jmeter压测的过程!

在软件架构与中间件实验的最后&#xff0c;要求进行非功能测试&#xff0c;那得非压力测试莫属了。虽然之前学习秒杀项目的时候看视频里面用过jmeter&#xff0c;但没有自己实操过&#xff0c;趁着这次机会&#xff0c;使用一下。 QPS与TPS 1、TPS&#xff1a; Transactions …

力扣周赛 -- 370周赛

先更新前两道题目&#xff0c;下午更新后两道 两道模板题(拓扑排序) 拓扑排序 拓扑排序&#xff08;Topological Sorting&#xff09;&#xff1a;一种对有向无环图&#xff08;DAG&#xff09;的所有顶点进行线性排序的方法&#xff0c;使得图中任意一点 $u$ 和 $v$&#xf…

【LeetCode】每日一题 2023_11_5 重复的DNA序列

文章目录 刷题前唠嗑重复的DNA序列题目描述代码和解题思路偷看大佬题解结语 刷题前唠嗑 LeetCode? 启动&#xff01;&#xff01;&#xff01; 重复的DNA序列 题目链接&#xff1a;187. 重复的DNA序列 题目描述 代码和解题思路 func findRepeatedDnaSequences(s string) …

fastapi-Headers和Cookies

在FastAPI中&#xff0c;Headers是一个特殊的类型&#xff0c;用于处理HTTP请求头&#xff08;Headers&#xff09;。Headers允许你接收、访问和修改HTTP请求中的头部信息。 使用Headers&#xff0c;你可以在FastAPI的路由视图中将请求头作为参数接收&#xff0c;并对它们进行…

linux基本用法

文章目录 前言一、开关机操作1.1 开机登陆1.2 关机1.3 系统目录结构 二、常用的基本命令(重点)2.1 相对路径与绝对路径2.2 处理目录的常用命令2.2.1 ls2.2.2 cd 切换目录2.2.3 pwd ( 显示目前所在的目录 )2.2.4 mkdir &#xff08;创建新目录&#xff09;2.2.5 rmdir ( 删除空的…

【Vue.js】Vue3全局配置Axios并解决跨域请求问题

系列文章目录 文章目录 系列文章目录背景一、部署Axios1. npm 安装 axios2. 创建 request.js&#xff0c;创建axios实例3. 在main.js中全局注册axios4. 在页面中使用axios 二、后端解决跨域请求问题方法一 解决单Contoller跨域访问方法二 全局解决跨域问题 背景 对于前后端分离…

回溯算法--4后问题

1.问题描述 四皇后问题&#xff1a;在4 4 的方格棋盘上放置4个皇后&#xff0c;使得没有两个皇后在同一行、同一列、也不在同一条45度的斜线上。问有多少种可能的布局&#xff1f; 解是4维向量 比如上面这个解<2,4,1,3> 分别表示圆圈的第2列、第4列等 还可以得到另一解…

LeetCode题:83删除排序链表中的重复元素 141环形链表

83删除排序链表中的重复元素 题目内容 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2]示例 2&#xff1a; 输入&#xf…

下载安装PyCharm的步骤

1、首先进入Pycharm官网&#xff0c;并进行下载&#xff0c;日常使用社区版也是OK的 官网&#xff1a;https://www.jetbrains.com/pycharm/download/?sectionwindows 2、可以自定义路径进行安装&#xff0c;注意路径要全英哈 3、大家可以根据自己的需要来进行勾选 4、安装完成…

【漏洞复现】Webmin 远程命令执行(CVE-2019-15107)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞验证 1.5、深度利用1、反弹Shell 1.6、修复建议1.7、参考链接 说明内容漏洞编号CVE-2019-15107漏洞…

蒙哥马利算法模乘(四)

一 蒙哥马利算法模乘介绍 蒙哥马利模乘算法主要为了进行大数运算a*b mod n,在介绍蒙哥马利模乘之前,先让我们来了解蒙哥马利约减。 1.1 蒙哥马利约减 a mod n 如果a是一个2048位的整数,n是一个1024位的整数,如果直接采用相除的方式,不论在空间还是时间上都会产生非常大…

【漏洞复现】Django_debug page_XSS漏洞(CVE-2017-12794)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞分析3、漏洞验证 说明内容漏洞编号CVE-2017-12794漏洞名称Django_debug page_XSS漏洞漏洞评级影响范…

北京联通iptv组播配置

多年前折腾过iptv&#xff0c;近期搬家换了个大电视&#xff0c;打算把iptv配置好了&#xff0c;尽管不怎么看&#xff0c;但聊胜于无。 其实很简单&#xff0c;用到了一些工具&#xff0c;记录如下 1. openwrt配置 因为有软路由&#xff0c;所以就借助openwrt了&#xff0c;一…

2023年03月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 十进制数111转换成二进制数是&#xff1f;&#xff08; &#xff09; A: 111 B: 1111011 C: 101111 D: 1101111 答案…

往事匆匆,值得怀念

不知不觉已经一年了 时间过得好快&#xff0c;各位赶路人&#xff0c;愿大家前程似锦&#xff0c;家庭美满。

智能·开源·安全|.NET Conf China 2023

点击蓝字 关注我们 大会介绍 .NET Conf China 2023是面向开发人员的社区峰会&#xff0c;延续 .NET Conf 2023的活动&#xff0c;庆祝 .NET 8的发布和回顾过去一年来 .NET 在中国的发展成果&#xff0c;它是由中国各地区的技术社区共同发起举办、知名企业和开源组织联合协办&am…